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 Amsn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amsn-devel