Hello again!
Here I attach a patch to use the system proxy settings like Firefox or
Pidgin does.
Actually it supports the environment variable "http_proxy"
(ex: $ export http_proxy=http://myproxy.com:81)
and the proxy set in the gnome preferences:
(System -> Preferences -> Proxy)
It has a lot of checks about gconf that I didn't know if it would be
better to remove to make the code more readable but finally I have left
them there. Remove them if you think it's better.
Finally I couldn't test authentication but it should work so if someone
can confirm it, please do it!
ToDo:
* Translate the key "systemconnection" "Use system proxy settings" to
all of the languages except spanish and english. You can look into the
network preferences of firefox and use the same phrase.
* KDE, Xfce support...
* Testing authentication
* Test...
I have been using it for two weeks and everything seems to work fine.
--
Regards, Pablo.
Index: lang/langen
===================================================================
--- lang/langen (revisión: 10812)
+++ lang/langen (copia de trabajo)
@@ -933,6 +933,7 @@
subject Subject
svnversion SVN Version
syntaxerror Syntax Error
+systemconnection Use system proxy settings
tabbedglobal A tabbed window for all users in the contact list
tabbedgroups A tabbed window for users from the same group
tabbed Tabbed Windows
Index: lang/langes
===================================================================
--- lang/langes (revisión: 10812)
+++ lang/langes (copia de trabajo)
@@ -934,6 +934,7 @@
subjectrequired Asunto requerido
svnversion Versión SVN
syntaxerror Error de sintaxis
+systemconnection Usar los datos de proxy del sistema
tabbedglobal Una ventana con pestañas para todos los usuarios
tabbedgroups Una ventana con pestañas para cada grupo
tabbed Ventanas con pestañas
Index: protocol.tcl
===================================================================
--- protocol.tcl (revisión: 10812)
+++ protocol.tcl (copia de trabajo)
@@ -7257,6 +7257,104 @@
$name configure -proxy_user [::config::getKey proxyuser]
$name configure -proxy_password [::config::getKey proxypass]
+ } elseif { [::config::getKey connectiontype] == "system" } {
+
+ # System proxy settings by PabloCastellano
+ # !!!Only GNOME and $http_proxy support at the moment!!!
+ # Maybe the gconf keys use_same_proxy and autoconfig_url should
be considered.
+ # system http proxy working
+ # I HAVE NOT TESTED authentication over http but it should work.
+
+ #First try to get environment var "http_proxy"
+ # env $http_proxy will only exist if amsn is launched from a
terminal
+ #try to get use_http_proxy from gconf
+ if { ! [info exists ::env(http_proxy) ] &&
+ ! [catch { eval [concat [list "exec"] "gconftool -g
/system/proxy/mode"]} proxymode ] } {
+
+ set usehttp [eval [concat [list "exec"] "gconftool -g
/system/http_proxy/use_http_proxy"]]
+ status_log "systemproxy: Use system proxy: $usehttp\n"
red
+
+ if {$usehttp == "true" && $proxymode != "none"} {
+
+ #Get host from gconf
+ if { [catch { eval [concat [list "exec"]
"gconftool -g /system/http_proxy/host"]} proxyhost ] } {
+ status_log "systemproxy: Error getting
host from gconf\n" red
+ } else {
+ status_log "systemproxy: proxy is:
$proxyhost\n" red
+ $name configure -proxy_host $proxyhost
+ }
+
+ #Get port from gconf
+ if { [catch { eval [concat [list "exec"]
"gconftool -g /system/http_proxy/port"]} proxyport ] } {
+ status_log "systemproxy: Error getting
port from gconf\n" red
+ } else {
+ status_log "systemproxy: port is:
$proxyport\n" red
+ $name configure -proxy_port $proxyport
+ }
+
+ #Get use_authentication from gconf
+ if { [catch { eval [concat [list "exec"]
"gconftool -g /system/http_proxy/use_authentication"]} proxyauth ] } {
+ status_log "systemproxy: Error getting
use_authentication from gconf\n" red
+ } else {
+ status_log "systemproxy:
use_authentication is: $proxyauth\n" red
+
+ if {$proxyauth == "true"} {
+
+ $name configure
-proxy_authenticate 1
+
+ #Get authentication_user from
gconf
+ if { [catch { eval [concat
[list "exec"] "gconftool -g /system/http_proxy/authentication_user"]} proxyuser
] } {
+ status_log
"systemproxy: Error getting authentication_user from gconf\n" red
+ } else {
+ status_log
"systemproxy: authentication_user is: $proxyuser\n" red
+ $name configure
-proxy_user $proxyuser
+ }
+
+ #Get authentication_password
from gconf
+ if { [catch { eval [concat
[list "exec"] "gconftool -g /system/http_proxy/authentication_password"]}
proxypass ] } {
+ status_log
"systemproxy: Error getting authentication_password from gconf\n" red
+ } else {
+ status_log
"systemproxy: authentication_password is: $proxypass\n" red
+ $name configure
-proxy_password $proxypass
+ }
+
+ } else { # use_authentication == "false"
+ $name configure
-proxy_authenticate 0 -proxy_user "" -proxy_password ""
+ }
+ }
+
+
+ } else { # use_http_proxy == "false" || mode == "none"
+ #Configure as direct
+ $name configure -proxy_host ""
+ $name configure -proxy_port ""
+ }
+
+ } elseif { [info exists ::env(http_proxy) ] } {
+ #regexp. http://%s:%...@%s:%d
+ regsub
{^(?:(?:[^:/?#]+):)?(?://(?:(?:(?:([^:@]*):?([^:@]*))?@)?([^:/?#]*)(?::(\d*))?))?}
$::env(http_proxy) {"\1" "\2" "\3" "\4"} result
+
+ set user [lindex $result 0]
+ set pass [lindex $result 1]
+ set host [lindex $result 2]
+ set port [lindex $result 3]
+
+ $name configure -proxy_host $host -proxy_port $port
+
+ if {[llength $user] == 0} {
+ $name configure -proxy_authenticate 0
-proxy_user "" -proxy_password ""
+ } else {
+ $name configure -proxy_authenticate 1
-proxy_user $user -proxy_password $pass
+ }
+
+ } else { #it's not gnome and ENV $http_proxy is not set. =>
Don't use proxy
+ status_log "systemproxy: use_http_proxy gconf key NOT
FOUND\n" red
+
+ #Configure as direct
+ $name configure -proxy_host ""
+ $name configure -proxy_port ""
+ }
+
} else {
#$name configure -connection_wrapper DirectConnection
::config::setKey connectiontype "direct"
Index: preferences.tcl
===================================================================
--- preferences.tcl (revisión: 10812)
+++ preferences.tcl (copia de trabajo)
@@ -2197,6 +2197,8 @@
pack $lfname.1.direct -anchor w -side top -padx 10
radiobutton $lfname.2.http -text "[trans httpconnection]" -value http
-variable [::config::getVar connectiontype] -command UpdatePreferences
pack $lfname.2.http -anchor w -side top -padx 10
+ radiobutton $lfname.3.system -text "[trans systemconnection]" -value
system -variable [::config::getVar connectiontype] -command UpdatePreferences
+ pack $lfname.3.system -anchor w -side top -padx 10
radiobutton $lfname.3.proxy -text "[trans proxyconnection]" -value
proxy -variable [::config::getVar connectiontype] -command UpdatePreferences
pack $lfname.3.proxy -anchor w -side top -padx 10
Index: soap.tcl
===================================================================
--- soap.tcl (revisión: 10812)
+++ soap.tcl (copia de trabajo)
@@ -76,6 +76,51 @@
set headers [linsert $headers 0
"Proxy-Authorization" "Basic $auth"]
}
http::register https 443 HTTPsecureSocket
+ http::register http 80 ::socket
+ } elseif { [::config::getKey connectiontype] == "system" } {
+
+ if { ! [info exists ::env(http_proxy) ] &&
+ ! [catch { eval [concat [list "exec"]
"gconftool -g /system/proxy/mode"]} proxymode ] } {
+ set usehttp [eval [concat [list "exec"]
"gconftool -g /system/http_proxy/use_http_proxy"]]
+
+ if {$usehttp == "true" && $proxymode != "none"}
{
+ set proxy_host [eval [concat [list
"exec"] "gconftool -g /system/http_proxy/host"]]
+ set proxy_port [eval [concat [list
"exec"] "gconftool -g /system/http_proxy/port"]]
+ ::http::config -proxyhost $proxy_host
-proxyport $proxy_port
+
+ if { ! [catch { eval [concat [list
"exec"] "gconftool -g /system/http_proxy/use_authentication"]} result ] } {
+
+ if {$result == "true"} {
+ set proxy_user [eval
[concat [list "exec"] "gconftool -g /system/http_proxy/authentication_user"]]
+ set proxy_pass [eval
[concat [list "exec"] "gconftool -g
/system/http_proxy/authentication_password"]]
+ set auth [string map
{"\n" "" } [base64::encode ${proxy_user}:${proxy_pass}]]
+ set headers [linsert
$headers 0 "Proxy-Authorization" "Basic $auth"]
+ }
+ }
+
+ }
+ } elseif { [info exists ::env(http_proxy) ] } {
+ #regexp. http://%s:%...@%s:%d
+ regsub
{^(?:(?:[^:/?#]+):)?(?://(?:(?:(?:([^:@]*):?([^:@]*))?@)?([^:/?#]*)(?::(\d*))?))?}
$::env(http_proxy) {"\1" "\2" "\3" "\4"} result
+
+ set proxy_user [lindex $result 0]
+ set proxy_pass [lindex $result 1]
+ set proxy_host [lindex $result 2]
+ set proxy_port [lindex $result 3]
+
+ ::http::config -proxyhost $proxy_host
-proxyport $proxy_port
+
+ if {[llength $user] != 0} {
+ set auth [string map {"\n" "" }
[base64::encode ${proxy_user}:${proxy_pass}]]
+ set headers [linsert $headers 0
"Proxy-Authorization" "Basic $auth"]
+ }
+
+ } else {
+ status_log "systemproxy: in soap.tcl couldn't
find use_http_proxy key in gnome" red
+ ::http::config -proxyhost "" -proxyport ""
+ }
+
+ http::register https 443 HTTPsecureSocket
http::register http 80 ::socket
} elseif { [::config::getKey connectiontype] == "proxy" &&
[::config::getKey proxytype] == "socks5" } {
if {$proxy_host == "" } {
Index: config.tcl
===================================================================
--- config.tcl (revisión: 10812)
+++ config.tcl (copia de trabajo)
@@ -27,7 +27,7 @@
::config::setKey log_event_nick 0 ;#Log
changement of status
::config::setKey log_event_psm 0 ;#Log
changement of status
- ::config::setKey connectiontype direct ;# Connection type:
direct|http|proxy
+ ::config::setKey connectiontype direct ;# Connection type:
direct|http|proxy|system
::config::setKey proxy "" ;# If using
proxy, proxy host
::config::setKey proxytype "http" ;# Proxy type:
http|ssl|socks5
::config::setKey proxyauthenticate 0 ;# SOCKS5 use
username/password
Index: proxy.tcl
===================================================================
--- proxy.tcl (revisión: 10812)
+++ proxy.tcl (copia de trabajo)
@@ -172,6 +172,23 @@
install proxy using ProxyDirect %AUTO% -name $self
} elseif { [::config::getKey connectiontype] == "proxy" &&
[::config::getKey proxytype] == "socks5" } {
install proxy using ProxyDirect %AUTO% -name $self
+ } elseif { [::config::getKey connectiontype] == "system" } {
+ if { ! [info exists ::env(http_proxy) ] &&
+ ! [catch { eval [concat [list "exec"]
"gconftool -g /system/proxy/mode"]} proxymode ] } {
+ set usehttp [eval [concat [list "exec"]
"gconftool -g /system/http_proxy/use_http_proxy"]]
+
+ if {$usehttp == "true" && $proxymode != "none"}
{
+ install proxy using ProxyHTTP %AUTO%
-name $self -direct 0
+ } else {
+ #if use_http_proxy is false then use
directconnection
+ install proxy using ProxyDirect %AUTO%
-name $self
+ }
+ } elseif { [info exists ::env(http_proxy) ] } {
+ install proxy using ProxyHTTP %AUTO% -name
$self -direct 0
+ } else {
+ status_log "systemproxy: in proxy.tcl couldn't
find use_http_proxy key in gnome" red
+ install proxy using ProxyDirect %AUTO% -name
$self
+ }
} else {
::config::setKey connectiontype "direct"
install proxy using ProxyDirect %AUTO% -name $self
------------------------------------------------------------------------------
_______________________________________________
Amsn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/amsn-devel