Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/ssh.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3176 by maya, Sun Nov 30 16:14:41 2008 UTC revision 3180 by maya, Wed Dec 3 05:37:21 2008 UTC
# Line 3156  static void SSH2_send_channel_data(PTIns Line 3156  static void SSH2_send_channel_data(PTIns
3156          buffer_t *msg;          buffer_t *msg;
3157          unsigned char *outmsg;          unsigned char *outmsg;
3158          unsigned int len;          unsigned int len;
3159            char log[128];
3160    
3161          // SSH2鍵交換中の場合、パケットを捨てる。(2005.6.19 yutaka)          // SSH2鍵交換中の場合、パケットを捨てる。(2005.6.19 yutaka)
3162          if (pvar->rekeying) {          if (pvar->rekeying) {
# Line 3192  static void SSH2_send_channel_data(PTIns Line 3193  static void SSH2_send_channel_data(PTIns
3193                  buffer_free(msg);                  buffer_free(msg);
3194                  //debug_print(1, pvar->ssh_state.outbuf, 7 + 4 + 1 + 1 + len);                  //debug_print(1, pvar->ssh_state.outbuf, 7 + 4 + 1 + 1 + len);
3195    
3196                  notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_DATA was sent at SSH_handle_packet().", LOG_LEVEL_SSHDUMP);                  _snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_DATA was sent at SSH2_send_channel_data(). local:%d remote:%d", c->self_id, c->remote_id);
3197                    notify_verbose_message(pvar, log, LOG_LEVEL_SSHDUMP);
3198    
3199                  // remote window sizeの調整                  // remote window sizeの調整
3200                  if (buflen <= c->remote_window) {                  if (buflen <= c->remote_window) {
# Line 3294  void SSH_fail_channel_open(PTInstVar pva Line 3296  void SSH_fail_channel_open(PTInstVar pva
3296          }          }
3297  }  }
3298    
3299    void SSH2_confirm_channel_open(PTInstVar pvar, uint32 local_id)
3300    {
3301            buffer_t *msg;
3302            unsigned char *outmsg;
3303            int len;
3304            Channel_t *c;
3305            char log[128];
3306    
3307            c = ssh2_channel_lookup(local_id);
3308    
3309            msg = buffer_init();
3310            if (msg == NULL) {
3311                    // TODO: error check
3312                    return;
3313            }
3314            buffer_put_int(msg, c->remote_id);
3315            buffer_put_int(msg, c->self_id);
3316            buffer_put_int(msg, c->local_window);
3317            buffer_put_int(msg, c->local_maxpacket);
3318    
3319            len = buffer_len(msg);
3320            outmsg = begin_send_packet(pvar, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, len);
3321            memcpy(outmsg, buffer_ptr(msg), len);
3322            finish_send_packet(pvar);
3323            buffer_free(msg);
3324    
3325            _snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_OPEN_CONFIRMATION was sent at SSH_confirm_channel_open(). local:%d remote:%d", c->self_id, c->remote_id);
3326            notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE);
3327    }
3328    
3329  void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num,  void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num,
3330                                                            uint32 local_channel_num)                                                            uint32 local_channel_num)
3331  {  {
# Line 3306  void SSH_confirm_channel_open(PTInstVar Line 3338  void SSH_confirm_channel_open(PTInstVar
3338                  finish_send_packet(pvar);                  finish_send_packet(pvar);
3339    
3340          } else {          } else {
                 buffer_t *msg;  
                 unsigned char *outmsg;  
                 int len;  
3341                  Channel_t *c;                  Channel_t *c;
3342    
3343                  // port-forwarding(remote to local)のローカル接続への成功をサーバへ返す。(2005.7.2 yutaka)                  // port-forwarding(remote to local)のローカル接続への成功をサーバへ返す。(2005.7.2 yutaka)
# Line 3317  void SSH_confirm_channel_open(PTInstVar Line 3346  void SSH_confirm_channel_open(PTInstVar
3346                          // It is sure to be successful as long as it's not a program bug either.                          // It is sure to be successful as long as it's not a program bug either.
3347                          return;                          return;
3348                  }                  }
3349                    SSH2_confirm_channel_open(pvar, c->self_id);
                 msg = buffer_init();  
                 if (msg == NULL) {  
                         // TODO: error check  
                         return;  
                 }  
                 buffer_put_int(msg, c->remote_id);  
                 buffer_put_int(msg, c->self_id);  
                 buffer_put_int(msg, c->local_window);  
                 buffer_put_int(msg, c->local_maxpacket);  
   
                 len = buffer_len(msg);  
                 outmsg = begin_send_packet(pvar, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, len);  
                 memcpy(outmsg, buffer_ptr(msg), len);  
                 finish_send_packet(pvar);  
                 buffer_free(msg);  
   
                 notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_OPEN_CONFIRMATION was sent at SSH_confirm_channel_open().", LOG_LEVEL_VERBOSE);  
3350          }          }
3351  }  }
3352    
# Line 3368  void SSH_channel_input_eof(PTInstVar pva Line 3380  void SSH_channel_input_eof(PTInstVar pva
3380                          unsigned char *outmsg;                          unsigned char *outmsg;
3381                          int len;                          int len;
3382                          Channel_t *c;                          Channel_t *c;
3383                            char log[128];
3384    
3385                          // SSH2鍵交換中の場合、パケットを捨てる。(2005.6.21 yutaka)                          // SSH2鍵交換中の場合、パケットを捨てる。(2005.6.21 yutaka)
3386                          if (pvar->rekeying) {                          if (pvar->rekeying) {
# Line 3395  void SSH_channel_input_eof(PTInstVar pva Line 3408  void SSH_channel_input_eof(PTInstVar pva
3408                          finish_send_packet(pvar);                          finish_send_packet(pvar);
3409                          buffer_free(msg);                          buffer_free(msg);
3410    
3411                          notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_EOF was sent at SSH_channel_input_eof().", LOG_LEVEL_VERBOSE);                          _snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_EOF was sent at SSH_channel_input_eof(). local:%d remote:%d", c->self_id, c->remote_id);
3412                            notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE);
3413          }          }
3414    
3415  }  }
# Line 8004  void ssh2_channel_send_close(PTInstVar p Line 8018  void ssh2_channel_send_close(PTInstVar p
8018                  buffer_t *msg;                  buffer_t *msg;
8019                  unsigned char *outmsg;                  unsigned char *outmsg;
8020                  int len;                  int len;
8021                    char log[128];
8022    
8023                  // SSH2 serverにchannel closeを伝える                  // SSH2 serverにchannel closeを伝える
8024                  msg = buffer_init();                  msg = buffer_init();
# Line 8019  void ssh2_channel_send_close(PTInstVar p Line 8034  void ssh2_channel_send_close(PTInstVar p
8034                  finish_send_packet(pvar);                  finish_send_packet(pvar);
8035                  buffer_free(msg);                  buffer_free(msg);
8036    
8037                  notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_CLOSE was sent at ssh2_channel_send_close().", LOG_LEVEL_VERBOSE);                  _snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_CLOSE was sent at ssh2_channel_send_close(). local:%d remote:%d", c->self_id, c->remote_id);
8038                    notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE);
8039          }          }
8040  }  }
8041    
# Line 8394  static BOOL handle_SSH2_channel_data(PTI Line 8410  static BOOL handle_SSH2_channel_data(PTI
8410          int id;          int id;
8411          unsigned int str_len;          unsigned int str_len;
8412          Channel_t *c;          Channel_t *c;
8413            char log[128];
         notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_DATA was received.", LOG_LEVEL_SSHDUMP);  
8414    
8415          // 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード          // 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード
8416          data = pvar->ssh_state.payload;          data = pvar->ssh_state.payload;
# Line 8414  static BOOL handle_SSH2_channel_data(PTI Line 8429  static BOOL handle_SSH2_channel_data(PTI
8429                  return FALSE;                  return FALSE;
8430          }          }
8431    
8432            _snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_DATA was received. local:%d remote:%d", c->self_id, c->remote_id);
8433            notify_verbose_message(pvar, log, LOG_LEVEL_SSHDUMP);
8434    
8435          // string length          // string length
8436          str_len = get_uint32_MSBfirst(data);          str_len = get_uint32_MSBfirst(data);
8437          data += 4;          data += 4;
# Line 8542  static BOOL handle_SSH2_channel_eof(PTIn Line 8560  static BOOL handle_SSH2_channel_eof(PTIn
8560          char *data;          char *data;
8561          int id;          int id;
8562          Channel_t *c;          Channel_t *c;
8563            char log[128];
8564    
         notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_EOF was received.", LOG_LEVEL_VERBOSE);  
8565          // 切断時にサーバが SSH2_MSG_CHANNEL_EOF を送ってくるので、チャネルを解放する。(2005.6.19 yutaka)          // 切断時にサーバが SSH2_MSG_CHANNEL_EOF を送ってくるので、チャネルを解放する。(2005.6.19 yutaka)
8566    
8567          // 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード          // 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード
# Line 8560  static BOOL handle_SSH2_channel_eof(PTIn Line 8578  static BOOL handle_SSH2_channel_eof(PTIn
8578                  // TODO:                  // TODO:
8579                  return FALSE;                  return FALSE;
8580          }          }
8581    
8582            _snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_EOF was received. local:%d remote:%d", c->self_id, c->remote_id);
8583            notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE);
8584    
8585          if (c->type == TYPE_PORTFWD) {          if (c->type == TYPE_PORTFWD) {
8586                  FWD_channel_input_eof(pvar, c->local_num);                  FWD_channel_input_eof(pvar, c->local_num);
8587          }          }
# Line 8681  static BOOL handle_SSH2_channel_open(PTI Line 8703  static BOOL handle_SSH2_channel_open(PTI
8703                          c->remote_window = remote_window;                          c->remote_window = remote_window;
8704                          c->remote_maxpacket = remote_maxpacket;                          c->remote_maxpacket = remote_maxpacket;
8705                                                    
8706                          msg = buffer_init();                          SSH2_confirm_channel_open(pvar, c->self_id);
                         if (msg == NULL) {  
                                 // TODO: error check  
                                 return FALSE;  
                         }  
                         buffer_put_int(msg, c->remote_id);  
                         buffer_put_int(msg, c->self_id);  
                         buffer_put_int(msg, c->local_window);  
                         buffer_put_int(msg, c->local_maxpacket);  
   
                         len = buffer_len(msg);  
                         outmsg = begin_send_packet(pvar, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, len);  
                         memcpy(outmsg, buffer_ptr(msg), len);  
                         finish_send_packet(pvar);  
                         buffer_free(msg);  
   
                         notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_OPEN_CONFIRMATION was sent at handle_SSH2_channel_open().", LOG_LEVEL_VERBOSE);  
8707                  }                  }
8708                  else {                  else {
8709                          msg = buffer_init();                          msg = buffer_init();
# Line 8739  static BOOL handle_SSH2_channel_close(PT Line 8745  static BOOL handle_SSH2_channel_close(PT
8745          buffer_t *msg;          buffer_t *msg;
8746          char *s;          char *s;
8747          unsigned char *outmsg;          unsigned char *outmsg;
8748            char log[128];
         notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_CLOSE was received.", LOG_LEVEL_VERBOSE);  
8749    
8750          // コネクション切断時に、パケットダンプをファイルへ掃き出す。          // コネクション切断時に、パケットダンプをファイルへ掃き出す。
8751          if (LOG_LEVEL_SSHDUMP <= pvar->session_settings.LogLevel) {          if (LOG_LEVEL_SSHDUMP <= pvar->session_settings.LogLevel) {
# Line 8761  static BOOL handle_SSH2_channel_close(PT Line 8766  static BOOL handle_SSH2_channel_close(PT
8766                  return FALSE;                  return FALSE;
8767          }          }
8768    
8769            _snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_CLOSE was received. local:%d remote:%d", c->self_id, c->remote_id);
8770            notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE);
8771    
8772          if (c->type == TYPE_SHELL) {          if (c->type == TYPE_SHELL) {
8773                  msg = buffer_init();                  msg = buffer_init();
8774                  if (msg == NULL) {                  if (msg == NULL) {

Legend:
Removed from v.3176  
changed lines
  Added in v.3180

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26