Changeset 1103:d8591b1c56cd in freeDiameter for libfdcore/cnxctx.c
- Timestamp:
- May 10, 2013, 7:48:57 PM (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdcore/cnxctx.c
r1102 r1103 228 228 CHECK_SYS_DO( cli_sock = accept(serv->cc_socket, (sSA *)&ss, &ss_len), return NULL ); 229 229 230 if (TRACE_BOOL(INFO)) {231 char buf[1024];232 sSA_DUMP_NODE( buf, sizeof(buf), &ss, NI_NUMERICHOST );233 fd_log_debug("%s : accepted new client [%s].", fd_cnx_getid(serv), buf);234 }235 236 230 CHECK_MALLOC_DO( cli = fd_cnx_init(1), { shutdown(cli_sock, SHUT_RDWR); close(cli_sock); return NULL; } ); 237 231 cli->cc_socket = cli_sock; … … 264 258 snprintf(cli->cc_remid, sizeof(cli->cc_remid), "[err:%s]", gai_strerror(rc)); 265 259 } 260 261 LOG_D("Incoming connection: '%s' <- '%s' {%s}", fd_cnx_getid(serv), cli->cc_remid, cli->cc_id); 266 262 267 263 #ifndef DISABLE_SCTP … … 275 271 cli->cc_sctp_para.pairs = cli->cc_sctp_para.str_in; 276 272 277 TRACE_DEBUG(FULL,"%s : client '%s' (SCTP:%d, %d/%d streams)", fd_cnx_getid(serv), fd_cnx_getid(cli), cli->cc_socket, cli->cc_sctp_para.str_in, cli->cc_sctp_para.str_out);273 LOG_A( "%s : client '%s' (SCTP:%d, %d/%d streams)", fd_cnx_getid(serv), fd_cnx_getid(cli), cli->cc_socket, cli->cc_sctp_para.str_in, cli->cc_sctp_para.str_out); 278 274 } 279 275 #endif /* DISABLE_SCTP */ … … 287 283 int sock = 0; 288 284 struct cnxctx * cnx = NULL; 285 char sa_buf[sSA_DUMP_STRLEN]; 289 286 290 287 TRACE_ENTRY("%p %d", sa, addrlen); 291 288 CHECK_PARAMS_DO( sa && addrlen, return NULL ); 289 290 fd_sa_sdump_numeric(sa_buf, sa); 292 291 293 292 /* Create the socket and connect, which can take some time and/or fail */ … … 295 294 int ret = fd_tcp_client( &sock, sa, addrlen ); 296 295 if (ret != 0) { 297 int lvl; 298 switch (ret) { 299 case ECONNREFUSED: 300 301 /* "Normal" errors */ 302 lvl = FULL; 303 break; 304 default: 305 lvl = INFO; 306 } 307 /* Some errors are expected, we log at different level */ 308 TRACE_DEBUG( lvl, "fd_tcp_client returned an error: %s", strerror(ret)); 296 LOG_A("TCP connection to %s failed: %s", sa_buf, strerror(ret)); 309 297 return NULL; 310 298 } 311 }312 313 if (TRACE_BOOL(INFO)) {314 char buf[1024];315 sSA_DUMP_NODE_SERV( buf, sizeof(buf), sa, NI_NUMERICSERV);316 fd_log_debug("Connection established to server '%s' (TCP:%d).", buf, sock);317 299 } 318 300 … … 329 311 /* Generate the names for the object */ 330 312 { 331 char addrbuf[INET6_ADDRSTRLEN];332 char portbuf[10];333 313 int rc; 334 314 335 /* Numeric values for debug... */ 336 rc = getnameinfo(sa, addrlen, addrbuf, sizeof(addrbuf), portbuf, sizeof(portbuf), NI_NUMERICHOST | NI_NUMERICSERV); 337 if (rc) { 338 snprintf(addrbuf, sizeof(addrbuf), "[err:%s]", gai_strerror(rc)); 339 portbuf[0] = '\0'; 340 } 341 342 snprintf(cnx->cc_id, sizeof(cnx->cc_id), "TCP to [%s]:%s (%d)", addrbuf, portbuf, cnx->cc_socket); 315 snprintf(cnx->cc_id, sizeof(cnx->cc_id), "TCP,#%d->%s", cnx->cc_socket, sa_buf); 343 316 344 317 /* ...Name for log messages */ … … 347 320 snprintf(cnx->cc_remid, sizeof(cnx->cc_remid), "[err:%s]", gai_strerror(rc)); 348 321 } 322 323 LOG_A("TCP connection to %s succeed (socket:%d).", sa_buf, sock); 349 324 350 325 return cnx; … … 362 337 int sock = 0; 363 338 struct cnxctx * cnx = NULL; 339 char sa_buf[sSA_DUMP_STRLEN]; 364 340 sSS primary; 365 341 366 342 TRACE_ENTRY("%p", list); 367 343 CHECK_PARAMS_DO( list && !FD_IS_LIST_EMPTY(list), return NULL ); 344 345 fd_sa_sdump_numeric(sa_buf, &((struct fd_endpoint *)(list->next))->sa); 368 346 369 347 { 370 348 int ret = fd_sctp_client( &sock, no_ip6, port, list ); 371 349 if (ret != 0) { 372 int lvl; 373 switch (ret) { 374 case ECONNREFUSED: 375 376 /* "Normal" errors */ 377 lvl = FULL; 378 break; 379 default: 380 lvl = INFO; 381 } 382 /* Some errors are expected, we log at different level */ 383 TRACE_DEBUG( lvl, "fd_sctp_client returned an error: %s", strerror(ret)); 350 LOG_A("SCTP connection to [%s,...] failed: %s", sa_buf, strerror(ret)); 384 351 return NULL; 385 352 } … … 403 370 cnx->cc_sctp_para.pairs = cnx->cc_sctp_para.str_in; 404 371 405 if (TRACE_BOOL(INFO)) { 406 char buf[1024]; 407 sSA_DUMP_NODE_SERV( buf, sizeof(buf), &primary, NI_NUMERICSERV); 408 fd_log_debug("Connection established to server '%s' (SCTP:%d, %d/%d streams).", buf, sock, cnx->cc_sctp_para.str_in, cnx->cc_sctp_para.str_out); 409 } 372 fd_sa_sdump_numeric(sa_buf, (sSA *)&primary); 410 373 411 374 /* Generate the names for the object */ 412 375 { 413 char addrbuf[INET6_ADDRSTRLEN];414 char portbuf[10];415 376 int rc; 416 377 417 /* Numeric values for debug... */ 418 rc = getnameinfo((sSA *)&primary, sSAlen(&primary), addrbuf, sizeof(addrbuf), portbuf, sizeof(portbuf), NI_NUMERICHOST | NI_NUMERICSERV); 419 if (rc) { 420 snprintf(addrbuf, sizeof(addrbuf), "[err:%s]", gai_strerror(rc)); 421 portbuf[0] = '\0'; 422 } 423 424 snprintf(cnx->cc_id, sizeof(cnx->cc_id), "SCTP to [%s]:%s (%d)", addrbuf, portbuf, cnx->cc_socket); 378 snprintf(cnx->cc_id, sizeof(cnx->cc_id), "SCTP,#%d->%s", cnx->cc_socket, sa_buf); 425 379 426 380 /* ...Name for log messages */ … … 429 383 snprintf(cnx->cc_remid, sizeof(cnx->cc_remid), "[err:%s]", gai_strerror(rc)); 430 384 } 385 386 LOG_A("SCTP connection to %s succeed (socket:%d, %d/%d streams).", sa_buf, sock, cnx->cc_sctp_para.str_in, cnx->cc_sctp_para.str_out); 431 387 432 388 return cnx; … … 678 634 size_t fd_msg_pmdl_sizewithoverhead(size_t datalen) 679 635 { 680 return PMDL_PADDED(datalen) ;636 return PMDL_PADDED(datalen) + sizeof(struct fd_msg_pmdl); 681 637 } 682 638 … … 698 654 uint8_t * ret = NULL; 699 655 700 CHECK_MALLOC_DO( ret = malloc( PMDL_PADDED(expected_len) ), return NULL );656 CHECK_MALLOC_DO( ret = malloc( fd_msg_pmdl_sizewithoverhead(expected_len) ), return NULL ); 701 657 CHECK_FCT_DO( fd_cnx_init_msg_buffer(ret, expected_len, pmdl), {free(ret); return NULL;} ); 702 658 return ret; … … 707 663 uint8_t * ret = NULL; 708 664 709 CHECK_MALLOC_DO( ret = realloc( buffer, PMDL_PADDED(expected_len) ), return NULL );665 CHECK_MALLOC_DO( ret = realloc( buffer, fd_msg_pmdl_sizewithoverhead(expected_len) ), return NULL ); 710 666 CHECK_FCT_DO( fd_cnx_init_msg_buffer(ret, expected_len, pmdl), {free(ret); return NULL;} ); 711 667 return ret; … … 762 718 || (rcv_data.length > DIAMETER_MSG_SIZE_MAX)) { /* to avoid too big mallocs */ 763 719 /* The message is suspect */ 764 LOG_E( "Received suspect header [ver: %d, size: %zd] , assuming disconnection", (int)header[0], rcv_data.length);720 LOG_E( "Received suspect header [ver: %d, size: %zd] from '%s', assuming disconnection", (int)header[0], rcv_data.length, conn->cc_remid); 765 721 fd_cnx_markerror(conn); 766 722 goto out; /* Stop the thread, the recipient of the event will cleanup */ … … 1004 960 || (rcv_data.length > DIAMETER_MSG_SIZE_MAX)) { /* to avoid too big mallocs */ 1005 961 /* The message is suspect */ 1006 LOG_E( "Received suspect header [ver: %d, size: %zd] , assume disconnection", (int)header[0], rcv_data.length);962 LOG_E( "Received suspect header [ver: %d, size: %zd] from '%s', assume disconnection", (int)header[0], rcv_data.length, conn->cc_remid); 1007 963 fd_cnx_markerror(conn); 1008 964 goto out;
Note: See TracChangeset
for help on using the changeset viewer.