jcs
/subtext
/amendments
/203
tcp: Add UDP sending functionality
jcs made amendment 203 over 2 years ago
--- tcp.c Wed Jun 22 16:44:46 2022
+++ tcp.c Wed Jul 13 17:22:26 2022
@@ -383,6 +383,78 @@ _UDPMaxMTUSize(UDPiopb *pb, short *mtu)
return osErr;
}
+OSErr
+_UDPCreate(UDPiopb *pb, StreamPtr *stream, Ptr rcvBufPtr, long rcvBufLen,
+ UDPNotifyProc aNotifyProc, Ptr userDataPtr,
+ UDPIOCompletionProc ioCompletion, Boolean async)
+{
+ OSErr osErr;
+
+ memset(pb, 0, sizeof(*pb));
+
+ pb->csCode = UDPCreate;
+ pb->ioCompletion = ioCompletion;
+ pb->ioCRefNum = gIPPDriverRefNum;
+ pb->ioResult = 1;
+
+ pb->csParam.create.rcvBuff = rcvBufPtr;
+ pb->csParam.create.rcvBuffLen = rcvBufLen;
+ pb->csParam.create.notifyProc = aNotifyProc;
+ pb->csParam.create.userDataPtr = userDataPtr;
+
+ osErr = PBControl((ParmBlkPtr)pb, async);
+ if (!async && (noErr == osErr)) {
+ *stream = pb->udpStream;
+ }
+
+ return osErr;
+}
+
+OSErr
+_UDPSend(UDPiopb *pb, StreamPtr stream, wdsEntry *wdsPtr, ip_addr remoteIP,
+ udp_port remotePort, Ptr userData, UDPIOCompletionProc ioCompletion,
+ Boolean async)
+{
+ memset(pb, 0, sizeof(*pb));
+
+ pb->csCode = UDPWrite;
+ pb->ioCompletion = ioCompletion;
+ pb->ioCRefNum = gIPPDriverRefNum;
+ pb->udpStream = stream;
+ pb->ioResult = 1;
+
+ pb->csParam.send.remoteHost = remoteIP;
+ pb->csParam.send.remotePort = remotePort;
+ pb->csParam.send.wdsPtr = (Ptr)wdsPtr;
+ pb->csParam.send.checkSum = 0;
+ pb->csParam.send.sendLength = 0;
+ pb->csParam.send.userDataPtr = userData;
+
+ return PBControl((ParmBlkPtr)pb, async);
+}
+
+OSErr
+_UDPRelease(UDPiopb *pb, StreamPtr stream, Ptr userData,
+ UDPIOCompletionProc ioCompletion, Boolean async)
+{
+ OSErr osErr;
+
+ memset(pb, 0, sizeof(*pb));
+
+ pb->csCode = UDPRelease;
+ pb->ioCompletion = ioCompletion;
+ pb->ioCRefNum = gIPPDriverRefNum;
+ pb->udpStream = stream;
+ pb->ioResult = 1;
+
+ //pb->csParam.status.userDataPtr = userData;
+
+ osErr = PBControl((ParmBlkPtr)pb, async);
+
+ return osErr;
+}
+
+
/* convenience functions */
pascal void
--- tcp.h Wed Jun 22 16:45:50 2022
+++ tcp.h Wed Jul 13 17:14:27 2022
@@ -15,7 +15,9 @@ typedef struct
} HostInfoQ, *HostInfoQPtr, **HostInfoQHandle;
typedef ProcPtr TCPNotifyProc;
+typedef ProcPtr UDPNotifyProc;
typedef void (*TCPIOCompletionProc)(struct TCPiopb *iopb);
+typedef void (*UDPIOCompletionProc)(struct UDPiopb *iopb);
OSErr _TCPInit(void);
OSErr _TCPGetOurIP(ip_addr *ip, long *netMask);
@@ -48,6 +50,14 @@ OSErr _TCPRelease(TCPiopb *pb, StreamPtr stream, Ptr u
TCPIOCompletionProc ioCompletion, Boolean async);
OSErr _UDPMaxMTUSize(UDPiopb *pb, short *mtu);
+OSErr _UDPCreate(UDPiopb *pb, StreamPtr *stream, Ptr rcvBufPtr,
+ long rcvBufLen, UDPNotifyProc aNotifyProc, Ptr userDataPtr,
+ UDPIOCompletionProc ioCompletion, Boolean async);
+OSErr _UDPSend(UDPiopb *pb, StreamPtr stream, wdsEntry *wdsPtr,
+ ip_addr remoteIP, udp_port remotePort, Ptr userData,
+ UDPIOCompletionProc ioCompletion, Boolean async);
+OSErr _UDPRelease(UDPiopb *pb, StreamPtr stream, Ptr userData,
+ UDPIOCompletionProc ioCompletion, Boolean async);
OSErr TCPResolveName(char **name, unsigned long *ipAddress);