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

static int ipmsg_proc_get_info ( const udp_con_t *  con,
const msg_data_t *  orig_msg 
) [static]

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

Parameters:
[in] con UDPコネクション情報
[in] orig_msg 受信メッセージ(未使用)
Return values:
0 正常終了
-EINVAL 引数異常
-ENOENT ピアのIPアドレスを獲得できなかった.
-ENOMEM メモリ不足
Note:
IPMSG_SENDINFOを送出する.
Attention:
内部リンケージ

Definition at line 1847 of file protocol.c.

References IPMSG_PROTOCOL_MSG_NO_EXTENSION, IPMSG_PROTOCOL_PKTNUM_AUTO, IPMSG_PROTOCOL_SENDINFO_FMT, and ipmsg_send_sendmsg_packets().

Referenced by ipmsg_dispatch_message().

                                                                     {
      char           *version_string = NULL;
      const char             *ipaddr = NULL;
      ipmsg_send_flags_t local_flags = 0;
      size_t                     len = 0;
      int                         rc = 0;

      dbg_out("here\n");

      if (con == NULL) {
            rc = -EINVAL;
            goto error_out;
      }
      
      /*
       * フラグ設定
       */
      local_flags  = IPMSG_SENDINFO;

      /*
       * ピアのIPアドレスを取得する
       */
      ipaddr = udp_get_peeraddr(con);
      if (ipaddr == NULL) {
            rc = -ENOENT;
            goto error_out;
      }
      
      /*
       * 返却文字列長を算出する
       * 書式指定文字列の長さをそのまま足しているので, 実際に必要な分より少し多めに
       * 取っている.
       */
      
      len = 0;
      len += strlen(IPMSG_PROTOCOL_SENDINFO_FMT);
      len += strlen(_("Edition"));
      len += strlen(PACKAGE);
      len += strlen(_("Version"));
      len += strlen(VERSION);
      len += 1; /* ヌルターミネート */

      /*
       * 領域割り付け
       */
      version_string = g_malloc(len);
      if (version_string == NULL) {
            rc = -ENOMEM;
            goto error_out;
      }

      /*
       * 版数文字列作成
       */
      snprintf(version_string, len, IPMSG_PROTOCOL_SENDINFO_FMT,
          _("Edition"), PACKAGE, _("Version"), VERSION);


      dbg_out("Version string:%s\n", version_string);

      /*
       * 送信
       */
      rc = ipmsg_send_sendmsg_packets(con, ipaddr, 
          local_flags, IPMSG_PROTOCOL_PKTNUM_AUTO, 
          version_string, IPMSG_PROTOCOL_MSG_NO_EXTENSION);
      if (rc != 0) {
            goto free_version_string_out;
      }

      rc = 0;

free_version_string_out:
      if (version_string != NULL)
            g_free(version_string);

error_out:
      return rc;
}


Generated by  Doxygen 1.6.0   Back to index