@@ -2530,7 +2530,7 @@ void wolfSSL_CTX_SetIOSetPeer(WOLFSSL_CTX* ctx, CallbackSetPeer cb)
25302530
25312531#ifdef HAVE_NETX
25322532
2533- /* The NetX receive callback
2533+ /* The NetX receive callback for TLS
25342534 * return : bytes read, or error
25352535 */
25362536int NetX_Receive (WOLFSSL * ssl , char * buf , int sz , void * ctx )
@@ -2543,13 +2543,13 @@ int NetX_Receive(WOLFSSL *ssl, char *buf, int sz, void *ctx)
25432543
25442544 (void )ssl ;
25452545
2546- if (nxCtx == NULL || nxCtx -> nxSocket == NULL ) {
2546+ if (nxCtx == NULL || nxCtx -> nxTcpSocket == NULL ) {
25472547 WOLFSSL_MSG ("NetX Recv NULL parameters" );
25482548 return WOLFSSL_CBIO_ERR_GENERAL ;
25492549 }
25502550
25512551 if (nxCtx -> nxPacket == NULL ) {
2552- status = nx_tcp_socket_receive (nxCtx -> nxSocket , & nxCtx -> nxPacket ,
2552+ status = nx_tcp_socket_receive (nxCtx -> nxTcpSocket , & nxCtx -> nxPacket ,
25532553 nxCtx -> nxWait );
25542554 if (status != NX_SUCCESS ) {
25552555 WOLFSSL_MSG ("NetX Recv receive error" );
@@ -2586,7 +2586,7 @@ int NetX_Receive(WOLFSSL *ssl, char *buf, int sz, void *ctx)
25862586}
25872587
25882588
2589- /* The NetX send callback
2589+ /* The NetX send callback for TLS
25902590 * return : bytes sent, or error
25912591 */
25922592int NetX_Send (WOLFSSL * ssl , char * buf , int sz , void * ctx )
@@ -2598,12 +2598,12 @@ int NetX_Send(WOLFSSL* ssl, char *buf, int sz, void *ctx)
25982598
25992599 (void )ssl ;
26002600
2601- if (nxCtx == NULL || nxCtx -> nxSocket == NULL ) {
2601+ if (nxCtx == NULL || nxCtx -> nxTcpSocket == NULL ) {
26022602 WOLFSSL_MSG ("NetX Send NULL parameters" );
26032603 return WOLFSSL_CBIO_ERR_GENERAL ;
26042604 }
26052605
2606- pool = nxCtx -> nxSocket -> nx_tcp_socket_ip_ptr -> nx_ip_default_packet_pool ;
2606+ pool = nxCtx -> nxTcpSocket -> nx_tcp_socket_ip_ptr -> nx_ip_default_packet_pool ;
26072607 status = nx_packet_allocate (pool , & packet , NX_TCP_PACKET ,
26082608 nxCtx -> nxWait );
26092609 if (status != NX_SUCCESS ) {
@@ -2618,7 +2618,7 @@ int NetX_Send(WOLFSSL* ssl, char *buf, int sz, void *ctx)
26182618 return WOLFSSL_CBIO_ERR_GENERAL ;
26192619 }
26202620
2621- status = nx_tcp_socket_send (nxCtx -> nxSocket , packet , nxCtx -> nxWait );
2621+ status = nx_tcp_socket_send (nxCtx -> nxTcpSocket , packet , nxCtx -> nxWait );
26222622 if (status != NX_SUCCESS ) {
26232623 nx_packet_release (packet );
26242624 WOLFSSL_MSG ("NetX Send socket send error" );
@@ -2628,13 +2628,131 @@ int NetX_Send(WOLFSSL* ssl, char *buf, int sz, void *ctx)
26282628 return sz ;
26292629}
26302630
2631+ /* The NetX receive callback for DTLS
2632+ * return : bytes read, or error
2633+ */
2634+ int NetX_ReceiveFrom (WOLFSSL * ssl , char * buf , int sz , void * ctx )
2635+ {
2636+ NetX_Ctx * nxCtx = (NetX_Ctx * )ctx ;
2637+ ULONG left ;
2638+ ULONG total ;
2639+ ULONG copied = 0 ;
2640+ UINT status ;
2641+
2642+ (void )ssl ;
2643+
2644+ if (nxCtx == NULL || nxCtx -> nxUdpSocket == NULL ) {
2645+ WOLFSSL_MSG ("NetX Recv NULL parameters" );
2646+ return WOLFSSL_CBIO_ERR_GENERAL ;
2647+ }
2648+
2649+ if (nxCtx -> nxPacket == NULL ) {
2650+ status = nx_udp_socket_receive (nxCtx -> nxUdpSocket , & nxCtx -> nxPacket ,
2651+ nxCtx -> nxWait );
2652+ if (status != NX_SUCCESS ) {
2653+ WOLFSSL_MSG ("NetX Recv receive error" );
2654+ return WOLFSSL_CBIO_ERR_GENERAL ;
2655+ }
2656+ }
2657+
2658+ if (nxCtx -> nxPacket ) {
2659+ status = nx_packet_length_get (nxCtx -> nxPacket , & total );
2660+ if (status != NX_SUCCESS ) {
2661+ WOLFSSL_MSG ("NetX Recv length get error" );
2662+ return WOLFSSL_CBIO_ERR_GENERAL ;
2663+ }
2664+
2665+ left = total - nxCtx -> nxOffset ;
2666+ status = nx_packet_data_extract_offset (nxCtx -> nxPacket , nxCtx -> nxOffset ,
2667+ buf , sz , & copied );
2668+ if (status != NX_SUCCESS ) {
2669+ WOLFSSL_MSG ("NetX Recv data extract offset error" );
2670+ return WOLFSSL_CBIO_ERR_GENERAL ;
2671+ }
2672+
2673+ nxCtx -> nxOffset += copied ;
2674+
2675+ if (copied == left ) {
2676+ WOLFSSL_MSG ("NetX Recv Drained packet" );
2677+ nx_packet_release (nxCtx -> nxPacket );
2678+ nxCtx -> nxPacket = NULL ;
2679+ nxCtx -> nxOffset = 0 ;
2680+ }
2681+ }
2682+
2683+ return copied ;
2684+ }
2685+
2686+ /* The NetX send callback for DTLS
2687+ * return : bytes sent, or error
2688+ */
2689+ int NetX_SendTo (WOLFSSL * ssl , char * buf , int sz , void * ctx )
2690+ {
2691+ NetX_Ctx * nxCtx = (NetX_Ctx * )ctx ;
2692+ NX_PACKET * packet ;
2693+ NX_PACKET_POOL * pool ; /* shorthand */
2694+ UINT status ;
2695+
2696+ (void )ssl ;
2697+
2698+ if (nxCtx == NULL || nxCtx -> nxUdpSocket == NULL
2699+ || nxCtx -> nxdIp == NULL || nxCtx -> nxPort == NULL ) {
2700+ WOLFSSL_MSG ("NetX Send NULL parameters" );
2701+ return WOLFSSL_CBIO_ERR_GENERAL ;
2702+ }
2703+
2704+ pool = nxCtx -> nxUdpSocket -> nx_udp_socket_ip_ptr -> nx_ip_default_packet_pool ;
2705+ status = nx_packet_allocate (pool , & packet , NX_UDP_PACKET ,
2706+ nxCtx -> nxWait );
2707+ if (status != NX_SUCCESS ) {
2708+ WOLFSSL_MSG ("NetX Send packet alloc error" );
2709+ return WOLFSSL_CBIO_ERR_GENERAL ;
2710+ }
2711+
2712+ status = nx_packet_data_append (packet , buf , sz , pool , nxCtx -> nxWait );
2713+ if (status != NX_SUCCESS ) {
2714+ nx_packet_release (packet );
2715+ WOLFSSL_MSG ("NetX Send data append error" );
2716+ return WOLFSSL_CBIO_ERR_GENERAL ;
2717+ }
2718+
2719+ if (nxCtx -> nxdIp -> nxd_ip_version == NX_IP_VERSION_V4 )
2720+ {
2721+ status = nx_udp_socket_send (nxCtx -> nxUdpSocket , packet , nxCtx -> nxdIp -> nxd_ip_address .v4 , (UINT )(* nxCtx -> nxPort ));
2722+ if (status != NX_SUCCESS ) {
2723+ nx_packet_release (packet );
2724+ WOLFSSL_MSG ("NetX Send socket send error" );
2725+ return WOLFSSL_CBIO_ERR_GENERAL ;
2726+ }
2727+ }else
2728+ {
2729+ status = nxd_udp_socket_send (nxCtx -> nxUdpSocket , packet , nxCtx -> nxdIp , (UINT )(* nxCtx -> nxPort ));
2730+ if (status != NX_SUCCESS ) {
2731+ nx_packet_release (packet );
2732+ WOLFSSL_MSG ("NetX Send socket send error" );
2733+ return WOLFSSL_CBIO_ERR_GENERAL ;
2734+ }
2735+ }
2736+
2737+ return sz ;
2738+ }
26312739
26322740/* like set_fd, but for default NetX context */
2633- void wolfSSL_SetIO_NetX (WOLFSSL * ssl , NX_TCP_SOCKET * nxSocket , ULONG waitOption )
2741+ void wolfSSL_SetIO_NetX (WOLFSSL * ssl , NX_TCP_SOCKET * nxsocket , ULONG waitoption )
2742+ {
2743+ if (ssl ) {
2744+ ssl -> nxCtx .nxTcpSocket = nxsocket ;
2745+ ssl -> nxCtx .nxWait = waitoption ;
2746+ }
2747+ }
2748+
2749+ void wolfSSL_SetIO_NetX_Dtls (WOLFSSL * ssl , NX_UDP_SOCKET * nxsocket , NXD_ADDRESS * nxdip , USHORT * nxport , ULONG waitoption )
26342750{
26352751 if (ssl ) {
2636- ssl -> nxCtx .nxSocket = nxSocket ;
2637- ssl -> nxCtx .nxWait = waitOption ;
2752+ ssl -> nxCtx .nxUdpSocket = nxsocket ;
2753+ ssl -> nxCtx .nxdIp = nxdip ;
2754+ ssl -> nxCtx .nxPort = nxport ;
2755+ ssl -> nxCtx .nxWait = waitoption ;
26382756 }
26392757}
26402758
0 commit comments