tsk_size_t tnet_transport_send(const tnet_transport_handle_t *handle, tnet_fd_t from, const void* buf, tsk_size_t size) { tnet_transport_t *transport = (tnet_transport_t*)handle; int numberOfBytesSent = 0; if(!transport) { TSK_DEBUG_ERROR("Invalid transport handle."); goto bail; } if(transport->tls.enabled) { const transport_socket_xt* socket = getSocket(transport->context, from); if(socket && socket->tlshandle) { if(!tnet_tls_socket_send(socket->tlshandle, buf, size)) { numberOfBytesSent = size; } else { numberOfBytesSent = 0; } goto bail; } } else if((numberOfBytesSent = tnet_sockfd_send(from, buf, size, 0)) <= 0) { TNET_PRINT_LAST_ERROR("send have failed."); //tnet_sockfd_close(&from); goto bail; } bail: transport->bytes_out += numberOfBytesSent; return numberOfBytesSent; }
/**@ingroup tnet_socket_group * Returns the number of bytes sent (or negative value on error) */ int tnet_socket_send_stream(tnet_socket_t* self, const void* data, tsk_size_t size) { if (!self || self->fd == TNET_INVALID_FD || !data || !size || !TNET_SOCKET_TYPE_IS_STREAM(self->type)) { TSK_DEBUG_ERROR("Invalid parameter"); return -1; } if (self->tlshandle && (TNET_SOCKET_TYPE_IS_TLS(self->type) || TNET_SOCKET_TYPE_IS_WSS(self->type))) { return tnet_tls_socket_send(self->tlshandle, data, size) == 0 ? (int)size : -1; // returns zero on success } return (int)tnet_sockfd_send(self->fd, data, size, 0); }
static void send_bodiless(tdav_session_msrp_t *msrp){ tmsrp_request_t* BODILESS; if(msrp->config->To_Path && msrp->config->From_Path){ if((BODILESS = tmsrp_create_bodiless(msrp->config->To_Path->uri, msrp->config->From_Path->uri))){ char* str; if((str = tmsrp_message_tostring(BODILESS))){ if(!tnet_sockfd_send(msrp->connectedFD, str, tsk_strlen(str), 0)){ TSK_DEBUG_WARN("Failed to send bodiless request."); } TSK_FREE(str); } TSK_OBJECT_SAFE_FREE(BODILESS); } } }
int tmsrp_receiver_recv(tmsrp_receiver_t* self, const void* data, tsk_size_t size) { tmsrp_message_t* message; if(!self || !data || !size){ TSK_DEBUG_ERROR("Invalid parameter"); return -1; } // put the data tmsrp_data_in_put(self->data_in, data, size); // get msrp messages while((message = tmsrp_data_in_get(self->data_in))){ /* alert that we have received a message (Request or Response) */ _tmsrp_receiver_alert_user(self, tsk_false, message); // // REQUEST // if(TMSRP_MESSAGE_IS_REQUEST(message)){ /* ============= SEND =============== */ if(TMSRP_REQUEST_IS_SEND(message)){ tmsrp_response_t* r2xx; tmsrp_request_t* REPORT; // send 200 OK if((r2xx = tmsrp_create_response(message, 200, "OK"))){ if(tmsrp_message_serialize(r2xx, self->buffer) == 0 && self->buffer->data){ tnet_sockfd_send(self->fd, self->buffer->data, self->buffer->size, 0); } tsk_buffer_cleanup(self->buffer); TSK_OBJECT_SAFE_FREE(r2xx); } // send REPORT if(tmsrp_isReportRequired(message, tsk_false)){ if((REPORT = tmsrp_create_report(message, 200, "OK"))){ if(tmsrp_message_serialize(REPORT, self->buffer) == 0 && self->buffer->data){ tnet_sockfd_send(self->fd, self->buffer->data, self->buffer->size, 0); } tsk_buffer_cleanup(self->buffer); TSK_OBJECT_SAFE_FREE(REPORT); } } } /* ============= REPORT =============== */ if(TMSRP_REQUEST_IS_REPORT(message)){ tmsrp_response_t* r2xx; // send 200 OK if((r2xx = tmsrp_create_response(message, 200, "Report received"))){ if(tmsrp_message_serialize(r2xx, self->buffer) == 0 && self->buffer->data){ tnet_sockfd_send(self->fd, self->buffer->data, self->buffer->size, 0); } tsk_buffer_cleanup(self->buffer); TSK_OBJECT_SAFE_FREE(r2xx); } } /* ============= AUTH =============== */ /* ============= METHOD =============== */ } // // RESPONSE // else{ //short code = TMSRP_RESPONSE_CODE(message); //TSK_DEBUG_INFO("code=%u, tid=%s, phrase=%s", code, message->tid, TMSRP_RESPONSE_PHRASE(message)); } // alert user layer TSK_OBJECT_SAFE_FREE(message); } return 0; }