MCPcopy Create free account
hub / github.com/Tencent/Hardcoder / sendPackage

Method sendPackage

libapp2sys/src/main/cpp/udp.h:443–493  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

441 }
442
443 int sendPackage(struct sockaddr_in *addr, uint8_t type, u_int32_t seq, UdpPkg *udpPkg) {
444 if ((!udpPkg) || (!addr)) {
445 perr("sendpackage pkg:%d || addr:%d", (uint32_t) ((uint64_t)udpPkg & 0xffffffffL) , (int) ((uint64_t)addr & 0xffffffffL) );
446 return -1;
447 }
448
449 udpPkg->version = CONST_VERSION;
450 udpPkg->type = type;
451 udpPkg->seq = seq;
452 udpPkg->datacrc = 0;
453 udpPkg->datacrc = getCrc32((uint8_t *) udpPkg, udpPkg->pkgLen());
454
455 pdbg("SEND type:%s:%d seq:%d datalen:%d datacrc:0x%x ", packageTypeStr(type), type, seq, udpPkg->datalen, udpPkg->datacrc);
456
457 const int sendRet = (int) sendto(m_fd, udpPkg, udpPkg->pkgLen(), 0, (struct sockaddr *) addr, sizeof(struct sockaddr));
458
459 const std::string strAddr = sockaddrToString(*addr);
460 pdbg("SEND type:%s seq:%d addr:%s fd:%d len:%d sendRet:%d %s", packageTypeStr(udpPkg->type), udpPkg->seq,
461 strAddr.c_str(), m_fd, udpPkg->pkgLen(), sendRet, "");
462
463 if (udpPkg->type == PACKAGE_ACK) {
464 return sendRet; // Set a timeout event if the packet isn't an ACK
465 }
466
467 const int64_t iSender = sockaddrToint64(*addr);
468 Sender *const ss = m_mapSender.count(iSender) ? m_mapSender[iSender] : NULL;
469 if (!ss) {
470 perr("Invalid socket. Not in the list. addr:%s fd:%d", strAddr.c_str(), m_fd);
471 return -1;
472 }
473 TimeoutEvent *pEvent = NULL;
474 if (udpPkg->type == PACKAGE_SYN) {
475 pEvent = &ss->synTimeoutEvent;
476 } else if (udpPkg->type == PACKAGE_FIN) {
477 pEvent = &ss->finTimeoutEvent;
478 } else if (udpPkg->type == PACKAGE_DATA) {
479 pEvent = getWindowBySeq(ss->dataWindow, udpPkg->seq);
480 if (!pEvent) {
481 perr("DataPkgNotFountInWin :%s win:%s", udpPkg->toString().c_str(), getWindowSeqList(ss->dataWindow).c_str());
482 return -2;
483 }
484 } else {
485 perr("Invalid sock:%d type:%d", m_fd, udpPkg->type);
486 return -3;
487 }
488
489 memcpy(&(pEvent->toaddr), addr, sizeof(struct sockaddr_in));
490 pEvent->timeout = getMillisecond() + m_timeoutms;
491 addTimeoutEvent(pEvent);
492 return 0;
493 }
494
495 Sender* getSender(sockaddr_in addr) {
496 const int64_t iSender = sockaddrToint64(addr);

Callers

nothing calls this directly

Calls 7

getCrc32Function · 0.85
sockaddrToStringFunction · 0.85
sockaddrToint64Function · 0.85
getMillisecondFunction · 0.85
pkgLenMethod · 0.80
countMethod · 0.80
toStringMethod · 0.45

Tested by

no test coverage detected