Exemplo n.º 1
0
void udp_reply_func(struct ReplyAddress *addr, char* msg, int size)
{
	printf("->udp_reply_func\n");
	int total = sendallto(addr->mSocket, msg, size, (sockaddr*)&addr->mSockAddr, addr->mSockAddrLen);
	printf("<-udp_reply_func  %d of %d\n", total, size);
	if (total < size) DumpReplyAddress(addr);
}
Exemplo n.º 2
0
int make_query(int fd, short int flags, struct sockaddr_in dest_addr, dns_question query) {
    dns_header qhead;
    char buf[BUFLEN];
    int buflen     = 0;
    int octetlen   = 0;
    char * dotptr  = NULL;
    char * hostptr = query.qname; //Service address
        
    memset(buf, 0, BUFLEN);
    
    qhead.id      = (unsigned short) htons(getpid());
    qhead.flags   = htons(flags); 
    qhead.qdcount = htons(0x0001);
    qhead.ancount = 0;
    qhead.nscount = 0;
    qhead.arcount = 0;
    
    buflen = sizeof(qhead);
    memcpy(buf, (void*)&qhead, buflen);
    
    do {
        dotptr = strchr(hostptr, '.');
        
        if (!dotptr)
            octetlen = strchr(hostptr,'\0') - hostptr;
        else 
            octetlen = dotptr - hostptr;
        
        buf[buflen++] = octetlen;
        strncpy(buf + buflen, hostptr, octetlen);
        buflen += octetlen;
        hostptr = dotptr + 1;
    } while(dotptr);
    
    memset(buf + buflen, 0, 2);
    buflen += 2;
    //qtype
    query.qtype = query.qtype;
    query.qclass = query.qclass;
    memcpy((void*)buf + buflen, (void*)&(query.qtype), sizeof(short));
    buflen += 2;
    //qclass
    memcpy((void*)buf + buflen, (void*)&(query.qclass), sizeof(short));
    buflen += 2;
    
    sendallto(fd, buf, buflen, &dest_addr);
    
    return 0;
}
Exemplo n.º 3
0
int netAddrSend(PyrObject *netAddrObj, int msglen, char *bufptr, bool sendMsgLen)
{
	int err, port, addr;

	SC_TcpClientPort* comPort = (SC_TcpClientPort*)(netAddrObj->slots + ivxNetAddr_Socket)->uptr;

	if (comPort) {
		// send TCP
		int tcpSocket = comPort->Socket();

		if (sendMsgLen) {
			// send length of message in network byte-order
			int32 sizebuf = htonl(msglen);
			sendall(tcpSocket, &sizebuf, sizeof(int32));
		}

		sendall(tcpSocket, bufptr, msglen);

	} else {
		if (gUDPport == 0) return errFailed;

		// send UDP
		err = slotIntVal(netAddrObj->slots + ivxNetAddr_Hostaddr, &addr);
		if (err) return err;

		if (addr == 0) {
#ifdef NO_INTERNAL_SERVER
      // no internal server under SC_WIN32 yet
#else
			if (gInternalSynthServer.mWorld) {
				World_SendPacket(gInternalSynthServer.mWorld, msglen, bufptr, &localServerReplyFunc);
			}
#endif
			return errNone;
		}

		err = slotIntVal(netAddrObj->slots + ivxNetAddr_PortID, &port);
		if (err) return err;

		struct sockaddr_in toaddr;
		makeSockAddr(toaddr, addr, port);

		sendallto(gUDPport->Socket(), bufptr, msglen, (sockaddr*)&toaddr, sizeof(toaddr));
	}

	return errNone;
}
void udp_reply_func(struct ReplyAddress *addr, char* msg, int size)
{
	int total = sendallto(addr->mSocket, msg, size, (sockaddr*)&addr->mSockAddr, addr->mSockAddrLen);
	if (total < size) DumpReplyAddress(addr);
}