Logo Search packages:      
Sourcecode: g2ipmsg version File versions  Download package

static int ipmsg_proc_anspubkey ( const udp_con_t *  con,
const msg_data_t *  msg 
) [static]

IPMSGのIPMSG_ANSPUBKEYパケットを処理する

Parameters:
[in] con UDPコネクション情報
[in] msg 受信したメッセージのメッセージ情報
Return values:
0 正常終了
-EINVAL 引数異常
-ENOSYS 暗号化未サポート
-ENOENT ピアのIPアドレスが不明
Attention:
内部リンケージ

Definition at line 565 of file protocol.c.

References pcrypt_crypt_parse_anspubkey().

Referenced by ipmsg_dispatch_message().

                                                                {
      int                 rc = 0;
      char         *pubkey_e = NULL;
      char         *pubkey_n = NULL;
      const char     *ipaddr = NULL;
      ipmsg_cap_t peer_cap = 0;

      if ( (con == NULL) || (msg == NULL) ) {
            rc = -EINVAL;
            goto error_out;
      }

      /*
       * ピアのIPアドレスを取得する.
       */
      ipaddr = udp_get_peeraddr(con);
      if (ipaddr == NULL) {
            rc = -ENOENT;
            goto error_out;
      }

#if defined(USE_OPENSSL)
      /*
       * ANSPUBKEYパケットから公開鍵と秘密鍵を獲得する.
       */
      rc = pcrypt_crypt_parse_anspubkey(msg->message, &peer_cap,
          (unsigned char **)&pubkey_e, (unsigned char **)&pubkey_n);
      if (rc != 0) {
            dbg_out("Can not parse anspub key message:rc=%d\n", rc);
            goto error_out;
      }

      /*
       * ANSPUBKEYパケットに登録された内容で, 公開鍵と秘密鍵を更新する.
       */
      rc = userdb_replace_public_key_by_addr(ipaddr, peer_cap, pubkey_e, pubkey_n);
      if (rc != 0) {
            dbg_out("Can register parse anspub key message:rc=%d\n", rc);
            goto free_pubkey_out;
      }

      rc = 0; /* 正常終了  */

free_pubkey_out:
      if (pubkey_e != NULL)
            g_free(pubkey_e);
      if (pubkey_n != NULL)
            g_free(pubkey_n);
#else
      rc = -ENOSYS;  /* 暗号化機能未サポート  */
#endif  /*  USE_OPENSSL  */

error_out:
      return rc;  
}


Generated by  Doxygen 1.6.0   Back to index