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

static int ipmsg_send_packet ( const udp_con_t *  con,
const char *  ipaddr,
const pktno_t  pktno,
const int  flags,
const char *  message,
const char *  extension 
) [static]

IPMSGのパケットを送出する.

Parameters:
[in] con UDPコネクション情報
[in] ipaddr 送信先IPアドレス
[in] pktno パケット番号
  • IPMSG_PROTOCOL_PKTNUM_AUTO 番号を自動的に割り当てる
  • 上記以外 pktnoで指定した番号を使用
[in] flags 送信フラグ
[in] message メッセージ部(内部形式)
  • IPMSG_PROTOCOL_MSG_NO_MESSAGE 空文を送信する
  • 上記以外 messageで指定した文を送信する
[in] extension 拡張部(内部形式)
  • IPMSG_PROTOCOL_MSG_NO_EXTENSION 空文を送信する
  • 上記以外 extensionで指定した文を送信する
Return values:
0 正常終了
-EINVAL 引数異常
Attention:
内部リンケージ

Definition at line 224 of file protocol.c.

References build_ipmsg_packet(), and IPMSG_PROTOCOL_ENTRY_PKT_ADDR.

Referenced by ipmsg_notify_number(), ipmsg_proc_br_isgetlist2(), ipmsg_proc_get_public_key(), ipmsg_proc_getlist(), ipmsg_send_br_isgetlist2(), ipmsg_send_entry_packets(), ipmsg_send_get_info_msg(), ipmsg_send_getpubkey(), and ipmsg_send_sendmsg_packets().

                                                                                                                                              {
      char              *packet = NULL;
      int                    rc = 0;
      size_t                len = 0;
      pktno_t       sent_pkt_no = 0;

      if ( (ipaddr == IPMSG_PROTOCOL_ENTRY_PKT_ADDR) && (con == NULL) ){
            rc = -EINVAL;
            goto error_out;
      }

      /*
       * パケット構築
       */
      rc = build_ipmsg_packet(ipaddr, pktno, flags, message, extension, 
          &packet, &len, &sent_pkt_no);
      
      if (rc != 0) {
            g_assert(packet == NULL);  /* エラー時は獲得しない前提 */
            goto error_out;
      }

      dbg_out("send message to %s:(message, ext-part) = (%s, %s)\n", 
          ( ipaddr ), 
          ( (message   != NULL) ? message : ""), 
          ( (extension != NULL) ? extension : "") );

      /*
       * 送信済みパケット記録
       */
      if  ( ( flags & IPMSG_SENDCHECKOPT ) &&
            ( !( flags & (IPMSG_NO_REPLY_OPTS|IPMSG_AUTORETOPT) ) ) ){
                  rc = register_sent_message(con, ipaddr, sent_pkt_no, 
                                       packet, len);

                  if (rc < 0) {
                        rc = -rc;
                        ipmsg_err_dialog(
                              _("Can not register message for:"
                                  "%s reason: %s error code = %d"), 
                              ipaddr, strerror(rc), rc);
                        goto free_packet_out;
                  }
      }
      

      /*
       * 送信 
       */ 
      rc = ipmsg_send_message(con, ipaddr, packet, len);
      if (rc != 0) {
            goto free_packet_out;
      }

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

free_packet_out:
      g_free(packet);

error_out:
      return rc;
}


Generated by  Doxygen 1.6.0   Back to index