<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff></diff>
      <filename>English.lproj/ServerDialog.nib/keyedobjects.nib</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,7 @@ require 'timer'
 
 class IRCSocket
   attr_accessor :delegate, :host, :port, :ssl
+  attr_accessor :useSystemSocks, :useSocks, :socks_version, :proxy_host, :proxy_port, :proxy_user, :proxy_password
   
   def initialize
     @sock = TcpClient.alloc.init
@@ -19,6 +20,13 @@ class IRCSocket
     @sock.host = @host
     @sock.port = @port
     @sock.ssl = @ssl
+    @sock.useSystemSocks = @useSystemSocks
+    @sock.useSocks = @useSocks
+    @sock.socks_version = @socks_version
+    @sock.proxy_host = @proxy_host
+    @sock.proxy_port = @proxy_port
+    @sock.proxy_user = @proxy_user
+    @sock.proxy_password = @proxy_password
     @sock.open
   end
   </diff>
      <filename>ruby/component/ircsocket.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,7 @@
 
 class TcpClient &lt; NSObject
   attr_accessor :delegate, :host, :port, :ssl
+  attr_accessor :useSystemSocks, :useSocks, :socks_version, :proxy_host, :proxy_port, :proxy_user, :proxy_password
   attr_reader :send_queue_size
   
   def initialize
@@ -10,6 +11,8 @@ class TcpClient &lt; NSObject
     @host = ''
     @port = 0
     @ssl = false
+    @useSystemSocks = false
+    @useSocks = false
     @send_queue_size = 0
   end
   
@@ -81,7 +84,13 @@ class TcpClient &lt; NSObject
   end
   
   def onSocketWillConnect(sock)
-    sock.useSSL if @ssl
+    if @useSystemSocks
+      @sock.useSystemSocksProxy
+    elsif @useSocks
+      @sock.useSocksProxyVersion_host_port_user_password(@socks_version, @proxy_host, @proxy_port, @proxy_user, @proxy_password)
+    elsif @ssl
+      @sock.useSSL
+    end
   end
   
   def onSocket_didConnectToHost_port(sock, host, port)</diff>
      <filename>ruby/component/tcpclient.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,7 +10,8 @@ class ServerDialog &lt; NSObject
   ib_outlet :window
   ib_mapped_outlet :nameText, :hostCombo, :passwordText, :nickText, :usernameText, :realnameText, :auto_connectCheck, :sslCheck
   ib_mapped_outlet :nickPasswordText
-  ib_mapped_int_outlet :portText, :encodingCombo, :fallback_encodingCombo
+  ib_mapped_int_outlet :portText, :encodingCombo, :fallback_encodingCombo, :proxyCombo, :proxy_portText
+  ib_mapped_outlet :proxy_hostText, :proxy_userText, :proxy_passwordText
   ib_mapped_outlet :leaving_commentText, :userinfoText, :invisibleCheck
   ib_mapped_outlet :login_commandsText
   ib_outlet :alt_nicksText
@@ -75,6 +76,7 @@ class ServerDialog &lt; NSObject
     update_connection_page
     update_channels_page
     onEncodingComboChanged(nil)
+    onProxyComboChanged(nil)
     self.class.servers.each {|i| @hostCombo.addItemWithObjectValue(i.split(' ')[0]) }
     show
   end
@@ -133,6 +135,23 @@ class ServerDialog &lt; NSObject
     end
   end
   
+  def onProxyComboChanged(sender)
+    sel = @proxyCombo.selectedItem.tag.to_i
+    case sel
+    when IRCUnitConfig::PROXY_NONE,IRCUnitConfig::PROXY_SOCKS_SYSTEM
+      @proxy_hostText.setEnabled(false)
+      @proxy_portText.setEnabled(false)
+      @proxy_userText.setEnabled(false)
+      @proxy_passwordText.setEnabled(false)
+    when IRCUnitConfig::PROXY_SOCKS4,IRCUnitConfig::PROXY_SOCKS5
+      @proxy_hostText.setEnabled(true)
+      @proxy_portText.setEnabled(true)
+      @proxy_userText.setEnabled(true)
+      @proxy_passwordText.setEnabled(true)
+    end
+    @sslCheck.setEnabled(sel == IRCUnitConfig::PROXY_NONE)
+  end
+  
   def update_connection_page
     name = @nameText.stringValue.to_s
     host = @hostCombo.stringValue.to_s</diff>
      <filename>ruby/dialog/serverdialog.rb</filename>
    </modified>
    <modified>
      <diff>@@ -57,16 +57,26 @@ class IRCUnitConfig
   include AutoOpMatchable
   attr_accessor :name, :host, :port, :password, :nick, :alt_nicks, :username, :realname, :nickPassword
   attr_accessor :ssl, :auto_connect, :encoding, :fallback_encoding
+  attr_accessor :proxy, :proxy_host, :proxy_port, :proxy_user, :proxy_password
   attr_accessor :channels
   attr_accessor :leaving_comment, :userinfo, :invisible, :login_commands
   attr_accessor :autoop
   attr_accessor :owner, :uid
   
+  PROXY_NONE = 0
+  PROXY_SOCKS4 = 4
+  PROXY_SOCKS5 = 5
+  PROXY_SOCKS_SYSTEM = 1
+  
+  
   def initialize(seed={})
     @name = @host = @password = @nick = @username = @realname = @nickPassword = ''
     @alt_nicks = []
     @port = 6667
     @ssl = false
+    @proxy = PROXY_NONE
+    @proxy_host = @proxy_user = @proxy_password = ''
+    @proxy_port = 1080
     @auto_connect = true
     @leaving_comment = 'Leaving...'
     @userinfo = ''
@@ -81,11 +91,11 @@ class IRCUnitConfig
     when 'ja'
       @encoding = NSISO2022JPStringEncoding
     when 'ko'
-      @encoding = -2147482590
+      @encoding = NSLCCP949StringEncoding
     when 'zh-Hans'
-      @encoding = -2147482063
+      @encoding = NSLCGBKStringEncoding
     when 'zh-Hant'
-      @encoding = -2147481085
+      @encoding = NSLCBIG5StringEncoding
     else
       @encoding = NSUTF8StringEncoding
       @fallback_encoding = NSISOLatin1StringEncoding</diff>
      <filename>ruby/irc/config.rb</filename>
    </modified>
    <modified>
      <diff>@@ -220,6 +220,18 @@ class IRCUnit &lt; NSObject
     @conn.host = host
     @conn.port = @config.port.to_i
     @conn.ssl = @config.ssl
+    
+    case @config.proxy
+    when IRCUnitConfig::PROXY_SOCKS_SYSTEM
+      @conn.useSystemSocks = true
+    when IRCUnitConfig::PROXY_SOCKS5,IRCUnitConfig::PROXY_SOCKS4
+      @conn.useSocks = true
+      @conn.socks_version = @config.proxy == IRCUnitConfig::PROXY_SOCKS4 ? 4 : 5
+      @conn.proxy_host = @config.proxy_host
+      @conn.proxy_port = @config.proxy_port
+      @conn.proxy_user = @config.proxy_user
+      @conn.proxy_password = @config.proxy_password
+    end
     @conn.open
   end
   </diff>
      <filename>ruby/irc/unit.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,10 @@
 
 require 'numberformat'
 
+NSLCCP949StringEncoding = -2147482590
+NSLCGBKStringEncoding = -2147482063
+NSLCBIG5StringEncoding = -2147481085
+
 class String
   def each_char
     scan(/./) {|c| yield c }</diff>
      <filename>ruby/lib/utility.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>1987147848c345e5e77e9fcb87c21667c6b3cbdb</id>
    </parent>
  </parents>
  <author>
    <name>Satoshi Nakagawa</name>
    <email>psychs@limechat.net</email>
  </author>
  <url>http://github.com/psychs/limechat/commit/dae36a8af242dad1a18b2cc00aa82522ab8481c2</url>
  <id>dae36a8af242dad1a18b2cc00aa82522ab8481c2</id>
  <committed-date>2009-11-02T22:29:31-08:00</committed-date>
  <authored-date>2009-11-02T22:29:31-08:00</authored-date>
  <message>SOCKS proxy support</message>
  <tree>980e2a1ecea6ced218cc1cae46fb7680b1e5bd82</tree>
  <committer>
    <name>Satoshi Nakagawa</name>
    <email>psychs@limechat.net</email>
  </committer>
</commit>
