Пример #1
0
int TCPLow_PutPacket(TCPINSTANCE* tcp, TCPPEER* pPeer,void* bufptr,ULONG len)
{
	TUnitData	udata;
	OSStatus	err;
	OTResult	theResult;
	InetAddress	destAddr;
	unsigned char *pt;
	
	OTInitInetAddress(&destAddr,pPeer->port,pPeer->addr);
	
	udata.addr.maxlen = sizeof(InetAddress);
	udata.addr.len = sizeof(InetAddress);
	udata.addr.buf = (unsigned char *) &destAddr;
	
	udata.opt.maxlen = 0;
	udata.opt.len = 0;
	udata.opt.buf = nil;
	
	udata.udata.maxlen = len;
	udata.udata.len = len;
	udata.udata.buf = (unsigned char *)bufptr;
	
	do {
		err = OTSndUData(tcp->udpEndpoint, &udata);
		if (err == kOTLookErr) {
			theResult = OTLook(tcp->udpEndpoint);
			if (theResult == T_UDERR) {
				HandleErrorUDERR();
				err = 666;
			}
		}
	} while (err == 666);

	return err;
}
Пример #2
0
int tcpabi_udp_send( unsigned handle, void *buf, unsigned len, unsigned ttltos, unsigned id, unsigned char flags ) {
    TUnitData	udata;
    OSStatus	err;
    OTResult	theResult;

    udata.addr.maxlen = sizeof(gDests[handle].dest_addr);
    udata.addr.len = sizeof(gDests[handle].dest_addr);
    udata.addr.buf = (unsigned char *) &gDests[handle].dest_addr;

    udata.opt.maxlen = 0;
    udata.opt.len = 0;
    udata.opt.buf = nil;

    udata.udata.maxlen = len;
    udata.udata.len = len;
    udata.udata.buf = (unsigned char *)buf;

    do {
        err = OTSndUData(gUDPEndpoint, &udata);
        if (err == kOTLookErr) {
            theResult = OTLook(gUDPEndpoint);
            if (theResult == T_UDERR) {
                HandleErrorUDERR();
                err = 666;
            }
        }
    } while (err == 666);

    return err;
}
Пример #3
0
int tcpabi_udp_broadcast(void *buf, unsigned len) {
    OSStatus			err = noErr;
    TUnitData			udata;
    OTResult			theResult;
    short				i;
    InetAddress			currentAddress;

    //	this method sends the specified packet to our list of
    //	IP addreses. We return noErr if they were all sent
    //	without any trouble (we should ignore errors which
    //	indicate that the other end is not there since we
    //	really don't care if all of these packets are delivered)

    //	we don't broadcast to the first address because it's our own

    for (i = 1; i < gAddressList.addressCount; i++) {

        OTInitInetAddress(&currentAddress, SOCKET_MW2, gAddressList.addressList[i]);

        udata.addr.maxlen = sizeof(InetAddress);
        udata.addr.len = sizeof(InetAddress);
        udata.addr.buf = (unsigned char *) &currentAddress;

        udata.opt.maxlen = 0;
        udata.opt.len = 0;
        udata.opt.buf = nil;

        udata.udata.maxlen = len;
        udata.udata.len = len;
        udata.udata.buf = (unsigned char *)buf;

        do {
            err = OTSndUData(gUDPEndpoint, &udata);
            if (err == kOTLookErr) {
                theResult = OTLook(gUDPEndpoint);
                if (theResult == T_UDERR) {
                    HandleErrorUDERR();
                    err = 666;
                }
            }
        } while (err == 666);

    }

    return err;
}
Пример #4
0
int atalk_ddp_broadcast(void *buf, unsigned len) {
	OSStatus			err = noErr;
	TUnitData			udata;
	OTResult			theResult;
	short				i;
	extern short		gLookupCount;
	extern DDPAddress	gLookupResults[];
	
	//	this method sends the specified packet to our list of
	//	DDP addreses. We return noErr if they were all sent
	//	without any trouble (we should ignore errors which
	//	indicate that the other end is not there since we
	//	really don't care if all of these packets are delivered)
	
	for (i = 0; i < gLookupCount; i++) {

		udata.addr.len = sizeof(DDPAddress);
		udata.addr.buf = (unsigned char *) &gLookupResults[i];
		
		udata.opt.len = 0;
		udata.opt.buf = nil;
		
		udata.udata.len = len;
		udata.udata.buf = (unsigned char *)buf;
		
		do {
			err = OTSndUData(gDDPEndpoint, &udata);
			if (err == kOTLookErr) {
				theResult = OTLook(gDDPEndpoint);
				if (theResult == T_UDERR) {
					HandleErrorUDERR();
					err = 666;
				}
			}
		} while (err == 666);
		
	}
	
	return err;
}
Пример #5
0
int tcpabi_udp_send_to_address(InetAddress* theAddress, void *buf, unsigned len) {
    TUnitData	udata;
    OSStatus	err;
    OTResult	theResult;

    //	send our list of addresses to the destination address

    udata.addr.maxlen = sizeof(InetAddress);
    udata.addr.len = sizeof(InetAddress);
    udata.addr.buf = (unsigned char *) theAddress;

    udata.opt.maxlen = 0;
    udata.opt.len = 0;
    udata.opt.buf = nil;

    udata.udata.maxlen = len;
    udata.udata.len = len;
    udata.udata.buf = (unsigned char *)buf;

    do {
        err = OTSndUData(gUDPEndpoint, &udata);
        if (err == kOTLookErr) {
            theResult = OTLook(gUDPEndpoint);
            if (theResult == T_UDERR) {
                HandleErrorUDERR();
                err = 666;
            }
        }
    } while (err == 666);

    //	add the destination address to our list of addresses

    AddAddressToList(theAddress->fHost);

    return err;
}