MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / call_callbacks

Function call_callbacks

bin_interface.c:448–505  ·  view source on GitHub ↗

* main binary packet receiver loop */

Source from the content-addressed store, hash-verified

446 * main binary packet receiver loop
447 */
448void call_callbacks(char* buffer, struct receive_info *rcv)
449{
450 struct packet_cb_list *p;
451 unsigned int pkg_len;
452 bin_packet_t packet;
453 str capability;
454
455 memcpy(&pkg_len, buffer + BIN_PACKET_MARKER_SIZE, sizeof(unsigned int));
456 if (pkg_len < HEADER_SIZE + LEN_FIELD_SIZE + CMD_FIELD_SIZE) {
457 LM_ERR("invalid BIN packet size %u\n", pkg_len);
458 return;
459 }
460 if (pkg_len > BIN_MAX_BUF_LEN) {
461 LM_ERR("BIN packet size %u exceeds max size %zu\n",
462 pkg_len, (size_t)BIN_MAX_BUF_LEN);
463 return;
464 }
465
466 //add extra size so a realloc wont trigger after small altering of the packet
467 packet.buffer.s = pkg_malloc(pkg_len + 50);
468 if (!packet.buffer.s) {
469 LM_ERR("oom\n");
470 return;
471 }
472
473 packet.buffer.len = pkg_len;
474 packet.size = pkg_len + 50;
475 packet.flags = 0;
476 memcpy(packet.buffer.s, buffer, pkg_len);
477
478 bin_get_capability(&packet, &capability);
479 if ((unsigned int)capability.len >
480 pkg_len - HEADER_SIZE - LEN_FIELD_SIZE - CMD_FIELD_SIZE) {
481 LM_ERR("invalid BIN packet capability length %d for packet size %u\n",
482 capability.len, pkg_len);
483 bin_free_packet(&packet);
484 return;
485 }
486
487 packet.front_pointer = capability.s + capability.len + CMD_FIELD_SIZE;
488 memcpy(&packet.type, capability.s + capability.len, sizeof(int));
489
490 /* packet will be now processed for a specific capability */
491 for (p = reg_cbs; p; p = p->next) {
492 if (p->capability.len == capability.len &&
493 memcmp(capability.s, p->capability.s, capability.len) == 0) {
494
495 LM_DBG("binary Packet CMD: %d. Capability: %.*s\n",
496 packet.type, capability.len, capability.s);
497
498 p->cbf(&packet, packet.type, rcv,p->att);
499
500 break;
501 }
502 }
503
504 bin_free_packet(&packet);
505}

Callers 1

bin_receive_msgFunction · 0.85

Calls 2

bin_get_capabilityFunction · 0.85
bin_free_packetFunction · 0.85

Tested by

no test coverage detected