Changeset 30:bca243c65b56 in freeDiameter for freeDiameter/cnxctx.c
- Timestamp:
- Oct 28, 2009, 4:32:25 PM (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
freeDiameter/cnxctx.c
r29 r30 931 931 } 932 932 933 /* Wrapper around gnutls_record_recv to handle some error codes */ 934 static ssize_t fd_tls_send_handle_error(struct cnxctx * conn, gnutls_session_t session, void * data, size_t sz) 935 { 936 ssize_t ret; 937 again: 938 CHECK_GNUTLS_DO( ret = gnutls_record_send(session, data, sz), 939 { 940 switch (ret) { 941 case GNUTLS_E_REHANDSHAKE: 942 CHECK_GNUTLS_DO( ret = gnutls_handshake(session), 943 { 944 if (TRACE_BOOL(INFO)) { 945 fd_log_debug("TLS re-handshake failed on socket %d (%s) : %s\n", conn->cc_socket, conn->cc_id, gnutls_strerror(ret)); 946 } 947 goto end; 948 } ); 949 950 case GNUTLS_E_AGAIN: 951 case GNUTLS_E_INTERRUPTED: 952 goto again; 953 954 default: 955 TRACE_DEBUG(INFO, "This TLS error is not handled, assume unrecoverable error"); 956 } 957 } ); 958 end: 959 return ret; 960 } 961 962 963 933 964 /* Send function when no multi-stream is involved, or sending on stream #0 (send() always use stream 0)*/ 934 965 static int send_simple(struct cnxctx * conn, unsigned char * buf, size_t len) … … 939 970 do { 940 971 if (conn->cc_tls) { 941 CHECK_GNUTLS_DO( ret = gnutls_record_send (conn->cc_tls_para.session, buf + sent, len - sent), return ENOTCONN );972 CHECK_GNUTLS_DO( ret = fd_tls_send_handle_error(conn, conn->cc_tls_para.session, buf + sent, len - sent), return ENOTCONN ); 942 973 } else { 943 974 CHECK_SYS( ret = send(conn->cc_socket, buf + sent, len - sent, 0) ); /* better to replace with sendmsg for atomic sending? */ … … 984 1015 ASSERT(conn->cc_sctps_data.array != NULL); 985 1016 do { 986 CHECK_GNUTLS_DO( ret = gnutls_record_send (conn->cc_sctps_data.array[conn->cc_sctp_para.next - 1].session, buf + sent, len - sent), { TODO("Handle error (re-handshake, etc.."); return ENOTCONN; });1017 CHECK_GNUTLS_DO( ret = fd_tls_send_handle_error(conn, conn->cc_sctps_data.array[conn->cc_sctp_para.next].session, buf + sent, len - sent), return ENOTCONN ); 987 1018 sent += ret; 988 1019 } while ( sent < len );
Note: See TracChangeset
for help on using the changeset viewer.