Ignore:
Timestamp:
Jun 23, 2007 7:26:54 AM (17 years ago)
Author:
bennylp
Message:

More ticket #341: renamed pjsip_transport_send_raw() to pjsip_tpmgr_send_raw(), and added pjsip_endpt_send_raw() and pjsip_endpt_send_raw_to_uri()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsip/sip_util.c

    r1375 r1388  
    997997                                   pjsip_tx_data *tdata, 
    998998                                   void *token, 
    999                                    pjsip_endpt_callback cb) 
     999                                   pjsip_send_callback cb) 
    10001000{ 
    10011001    pjsip_host_info dest_info; 
     
    10241024    return PJ_SUCCESS; 
    10251025} 
     1026 
     1027 
     1028/* 
     1029 * Send raw data to a destination. 
     1030 */ 
     1031PJ_DEF(pj_status_t) pjsip_endpt_send_raw( pjsip_endpoint *endpt, 
     1032                                          pjsip_transport_type_e tp_type, 
     1033                                          const pjsip_tpselector *sel, 
     1034                                          const void *raw_data, 
     1035                                          pj_size_t data_len, 
     1036                                          const pj_sockaddr_t *addr, 
     1037                                          int addr_len, 
     1038                                          void *token, 
     1039                                          pjsip_tp_send_callback cb) 
     1040{ 
     1041    return pjsip_tpmgr_send_raw(pjsip_endpt_get_tpmgr(endpt), tp_type, sel, 
     1042                                NULL, raw_data, data_len, addr, addr_len, 
     1043                                token, cb); 
     1044} 
     1045 
     1046 
     1047/* Callback data for sending raw data */ 
     1048struct send_raw_data 
     1049{ 
     1050    pjsip_endpoint          *endpt; 
     1051    pjsip_tx_data           *tdata; 
     1052    pjsip_tpselector        *sel; 
     1053    void                    *app_token; 
     1054    pjsip_tp_send_callback   app_cb; 
     1055}; 
     1056 
     1057 
     1058/* Resolver callback for sending raw data. */ 
     1059static void send_raw_resolver_callback( pj_status_t status, 
     1060                                        void *token, 
     1061                                        const pjsip_server_addresses *addr) 
     1062{ 
     1063    struct send_raw_data *sraw_data = (struct send_raw_data*) token; 
     1064 
     1065    if (status != PJ_SUCCESS) { 
     1066        if (sraw_data->app_cb) { 
     1067            (*sraw_data->app_cb)(sraw_data->app_token, sraw_data->tdata, 
     1068                                 -status); 
     1069        } 
     1070    } else { 
     1071        pj_size_t data_len; 
     1072 
     1073        pj_assert(addr->count != 0); 
     1074 
     1075        data_len = sraw_data->tdata->buf.cur - sraw_data->tdata->buf.start; 
     1076        status = pjsip_tpmgr_send_raw(pjsip_endpt_get_tpmgr(sraw_data->endpt), 
     1077                                      addr->entry[0].type, 
     1078                                      sraw_data->sel, sraw_data->tdata, 
     1079                                      sraw_data->tdata->buf.start, data_len, 
     1080                                      &addr->entry[0].addr,  
     1081                                      addr->entry[0].addr_len,  
     1082                                      sraw_data->app_token, 
     1083                                      sraw_data->app_cb); 
     1084        if (status == PJ_SUCCESS) { 
     1085            (*sraw_data->app_cb)(sraw_data->app_token, sraw_data->tdata, 
     1086                                 data_len); 
     1087        } else if (status != PJ_EPENDING) { 
     1088            (*sraw_data->app_cb)(sraw_data->app_token, sraw_data->tdata, 
     1089                                 -status); 
     1090        } 
     1091    } 
     1092 
     1093    if (sraw_data->sel) { 
     1094        pjsip_tpselector_dec_ref(sraw_data->sel); 
     1095    } 
     1096    pjsip_tx_data_dec_ref(sraw_data->tdata); 
     1097} 
     1098 
     1099 
     1100/* 
     1101 * Send raw data to the specified destination URI.  
     1102 */ 
     1103PJ_DEF(pj_status_t) pjsip_endpt_send_raw_to_uri(pjsip_endpoint *endpt, 
     1104                                                const pj_str_t *p_dst_uri, 
     1105                                                const pjsip_tpselector *sel, 
     1106                                                const void *raw_data, 
     1107                                                pj_size_t data_len, 
     1108                                                void *token, 
     1109                                                pjsip_tp_send_callback cb) 
     1110{ 
     1111    pjsip_tx_data *tdata; 
     1112    struct send_raw_data *sraw_data; 
     1113    pj_str_t dst_uri; 
     1114    pjsip_uri *uri; 
     1115    pjsip_host_info dest_info; 
     1116    pj_status_t status; 
     1117 
     1118    /* Allocate buffer */ 
     1119    status = pjsip_endpt_create_tdata(endpt, &tdata); 
     1120    if (status != PJ_SUCCESS) 
     1121        return status; 
     1122 
     1123    pjsip_tx_data_add_ref(tdata); 
     1124 
     1125    /* Duplicate URI since parser requires URI to be NULL terminated */ 
     1126    pj_strdup_with_null(tdata->pool, &dst_uri, p_dst_uri); 
     1127 
     1128    /* Parse URI */ 
     1129    uri = pjsip_parse_uri(tdata->pool, dst_uri.ptr, dst_uri.slen, 0); 
     1130    if (uri == NULL) { 
     1131        pjsip_tx_data_dec_ref(tdata); 
     1132        return PJSIP_EINVALIDURI; 
     1133    } 
     1134 
     1135    /* Build destination info. */ 
     1136    status = get_dest_info(uri, tdata->pool, &dest_info); 
     1137    if (status != PJ_SUCCESS) { 
     1138        pjsip_tx_data_dec_ref(tdata); 
     1139        return status; 
     1140    } 
     1141 
     1142    /* Copy data (note: data_len may be zero!) */ 
     1143    tdata->buf.start = (char*) pj_pool_alloc(tdata->pool, data_len+1); 
     1144    tdata->buf.end = tdata->buf.start + data_len + 1; 
     1145    if (data_len) 
     1146        pj_memcpy(tdata->buf.start, raw_data, data_len); 
     1147    tdata->buf.cur = tdata->buf.start + data_len; 
     1148 
     1149    /* Init send_raw_data */ 
     1150    sraw_data = PJ_POOL_ZALLOC_T(tdata->pool, struct send_raw_data); 
     1151    sraw_data->endpt = endpt; 
     1152    sraw_data->tdata = tdata; 
     1153    sraw_data->app_token = token; 
     1154    sraw_data->app_cb = cb; 
     1155 
     1156    if (sel) { 
     1157        sraw_data->sel = PJ_POOL_ALLOC_T(tdata->pool, pjsip_tpselector); 
     1158        pj_memcpy(sraw_data->sel, sel, sizeof(pjsip_tpselector)); 
     1159        pjsip_tpselector_add_ref(sraw_data->sel); 
     1160    } 
     1161 
     1162    /* Resolve destination host. 
     1163     * The processing then resumed when the resolving callback is called. 
     1164     */ 
     1165    pjsip_endpt_resolve( endpt, tdata->pool, &dest_info, sraw_data, 
     1166                         &send_raw_resolver_callback); 
     1167    return PJ_SUCCESS; 
     1168} 
     1169 
    10261170 
    10271171/* 
     
    12161360                                               pjsip_tx_data *tdata, 
    12171361                                               void *token, 
    1218                                                pjsip_endpt_callback cb) 
     1362                                               pjsip_send_callback cb) 
    12191363{ 
    12201364    /* Determine which transports and addresses to send the response, 
     
    12651409                                                pjsip_tx_data *tdata, 
    12661410                                                void *token, 
    1267                                                 pjsip_endpt_callback cb) 
     1411                                                pjsip_send_callback cb) 
    12681412{ 
    12691413    pjsip_response_addr res_addr; 
Note: See TracChangeset for help on using the changeset viewer.