[Vm-dev] [commit] r2556 - CogVM source as per VMMaker.oscog-eem.161.
commits at squeakvm.org
commits at squeakvm.org
Thu Jun 7 19:29:53 UTC 2012
Author: eliot
Date: 2012-06-07 12:29:52 -0700 (Thu, 07 Jun 2012)
New Revision: 2556
Added:
branches/Cog/processors/IA32/linuxbochs/bochsconfig.h
Modified:
branches/Cog/nscogsrc/plugins/SocketPlugin/SocketPlugin.c
branches/Cog/nscogsrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
branches/Cog/nscogsrc/vm/cointerp.c
branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c
branches/Cog/src/plugins/SocketPlugin/SocketPlugin.c
branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
branches/Cog/src/vm/cointerp.c
branches/Cog/src/vm/cointerpmt.c
branches/Cog/src/vm/gcc3x-cointerp.c
branches/Cog/src/vm/gcc3x-cointerpmt.c
Log:
CogVM source as per VMMaker.oscog-eem.161.
Integrate ipv6 socket primitives. Add UnixOSProcessPlugin primitiveDup, and
make primitiveChdir return error and success results the right way round.
Modified: branches/Cog/nscogsrc/plugins/SocketPlugin/SocketPlugin.c
===================================================================
--- branches/Cog/nscogsrc/plugins/SocketPlugin/SocketPlugin.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/nscogsrc/plugins/SocketPlugin/SocketPlugin.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -1,9 +1,9 @@
/* Automatically generated by
- SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.105 uuid: 79234f80-ee6a-404c-9e5c-2134e3b76463
+ SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- SocketPlugin VMMaker.oscog-eem.105 uuid: 79234f80-ee6a-404c-9e5c-2134e3b76463
+ SocketPlugin VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
*/
-static char __buildInfo[] = "SocketPlugin VMMaker.oscog-eem.105 uuid: 79234f80-ee6a-404c-9e5c-2134e3b76463 " __DATE__ ;
+static char __buildInfo[] = "SocketPlugin VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ;
@@ -38,6 +38,8 @@
/*** Constants ***/
+#define BytesPerWord 4
+#define MULTIPLEBYTECODESETS 0
/*** Function Prototypes ***/
@@ -55,6 +57,20 @@
EXPORT(sqInt) primitiveResolverAbortLookup(void);
EXPORT(sqInt) primitiveResolverAddressLookupResult(void);
EXPORT(sqInt) primitiveResolverError(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfo(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoFamily(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoNext(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoProtocol(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoResult(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoSize(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoType(void);
+EXPORT(sqInt) primitiveResolverGetNameInfo(void);
+EXPORT(sqInt) primitiveResolverGetNameInfoHostResult(void);
+EXPORT(sqInt) primitiveResolverGetNameInfoHostSize(void);
+EXPORT(sqInt) primitiveResolverGetNameInfoServiceResult(void);
+EXPORT(sqInt) primitiveResolverGetNameInfoServiceSize(void);
+EXPORT(sqInt) primitiveResolverHostNameResult(void);
+EXPORT(sqInt) primitiveResolverHostNameSize(void);
EXPORT(sqInt) primitiveResolverLocalAddress(void);
EXPORT(sqInt) primitiveResolverNameLookupResult(void);
EXPORT(sqInt) primitiveResolverStartAddressLookup(void);
@@ -63,9 +79,13 @@
EXPORT(sqInt) primitiveSocketAbortConnection(void);
EXPORT(sqInt) primitiveSocketAccept(void);
EXPORT(sqInt) primitiveSocketAccept3Semaphores(void);
+EXPORT(sqInt) primitiveSocketAddressGetPort(void);
+EXPORT(sqInt) primitiveSocketAddressSetPort(void);
+EXPORT(sqInt) primitiveSocketBindTo(void);
EXPORT(sqInt) primitiveSocketBindToPort(void);
EXPORT(sqInt) primitiveSocketCloseConnection(void);
EXPORT(sqInt) primitiveSocketConnectionStatus(void);
+EXPORT(sqInt) primitiveSocketConnectTo(void);
EXPORT(sqInt) primitiveSocketConnectToPort(void);
EXPORT(sqInt) primitiveSocketCreate(void);
EXPORT(sqInt) primitiveSocketCreate3Semaphores(void);
@@ -76,13 +96,18 @@
EXPORT(sqInt) primitiveSocketListenOnPort(void);
EXPORT(sqInt) primitiveSocketListenOnPortBacklog(void);
EXPORT(sqInt) primitiveSocketListenOnPortBacklogInterface(void);
+EXPORT(sqInt) primitiveSocketListenWithBacklog(void);
EXPORT(sqInt) primitiveSocketListenWithOrWithoutBacklog(void);
EXPORT(sqInt) primitiveSocketLocalAddress(void);
+EXPORT(sqInt) primitiveSocketLocalAddressResult(void);
+EXPORT(sqInt) primitiveSocketLocalAddressSize(void);
EXPORT(sqInt) primitiveSocketLocalPort(void);
EXPORT(sqInt) primitiveSocketReceiveDataAvailable(void);
EXPORT(sqInt) primitiveSocketReceiveDataBufCount(void);
EXPORT(sqInt) primitiveSocketReceiveUDPDataBufCount(void);
EXPORT(sqInt) primitiveSocketRemoteAddress(void);
+EXPORT(sqInt) primitiveSocketRemoteAddressResult(void);
+EXPORT(sqInt) primitiveSocketRemoteAddressSize(void);
EXPORT(sqInt) primitiveSocketRemotePort(void);
EXPORT(sqInt) primitiveSocketSendDataBufCount(void);
EXPORT(sqInt) primitiveSocketSendDone(void);
@@ -103,9 +128,9 @@
struct VirtualMachine* interpreterProxy;
static const char *moduleName =
#ifdef SQUEAK_BUILTIN_PLUGIN
- "SocketPlugin VMMaker.oscog-eem.105 (i)"
+ "SocketPlugin VMMaker.oscog-eem.161 (i)"
#else
- "SocketPlugin VMMaker.oscog-eem.105 (e)"
+ "SocketPlugin VMMaker.oscog-eem.161 (e)"
#endif
;
static void * sCCLOPfn;
@@ -295,6 +320,321 @@
}
EXPORT(sqInt)
+primitiveResolverGetAddressInfo(void)
+{
+ sqInt family;
+ sqInt flags;
+ char *hostName;
+ sqInt hostSize;
+ sqInt protocol;
+ char *servName;
+ sqInt servSize;
+ sqInt type;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(5)));
+ hostName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(5))));
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(4)));
+ servName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(4))));
+ flags = interpreterProxy->stackIntegerValue(3);
+ family = interpreterProxy->stackIntegerValue(2);
+ type = interpreterProxy->stackIntegerValue(1);
+ protocol = interpreterProxy->stackIntegerValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ hostSize = interpreterProxy->byteSizeOf(((sqInt)(long)(hostName) - 4));
+ servSize = interpreterProxy->byteSizeOf(((sqInt)(long)(servName) - 4));
+ sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol(hostName, hostSize, servName, servSize, flags, family, type, protocol);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(6);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoFamily(void)
+{
+ sqInt family;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ family = sqResolverGetAddressInfoFamily();
+ _return_value = interpreterProxy->integerObjectOf(family);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoNext(void)
+{
+ sqInt more;
+ sqInt _return_value;
+
+ more = sqResolverGetAddressInfoNext();
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ _return_value = (more) ? interpreterProxy->trueObject(): interpreterProxy->falseObject();
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoProtocol(void)
+{
+ sqInt protocol;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ protocol = sqResolverGetAddressInfoProtocol();
+ _return_value = interpreterProxy->integerObjectOf(protocol);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoResult(void)
+{
+ sqInt addrSize;
+ char *socketAddress;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+ socketAddress = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketAddress) - 4));
+ sqResolverGetAddressInfoResultSize(socketAddress, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoSize(void)
+{
+ sqInt size;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ size = sqResolverGetAddressInfoSize();
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoType(void)
+{
+ sqInt type;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ type = sqResolverGetAddressInfoType();
+ _return_value = interpreterProxy->integerObjectOf(type);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfo(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ sqInt flags;
+ sqInt socketAddress;
+
+ socketAddress = interpreterProxy->stackValue(1);
+ flags = interpreterProxy->stackIntegerValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ sqResolverGetNameInfoSizeFlags(addrBase, addrSize, flags);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfoHostResult(void)
+{
+ sqInt addrSize;
+ char *socketName;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+ socketName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketName) - 4));
+ sqResolverGetNameInfoHostResultSize(socketName, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfoHostSize(void)
+{
+ sqInt size;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ size = sqResolverGetNameInfoHostSize();
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfoServiceResult(void)
+{
+ sqInt addrSize;
+ char *socketName;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+ socketName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketName) - 4));
+ sqResolverGetNameInfoServiceResultSize(socketName, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfoServiceSize(void)
+{
+ sqInt size;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ size = sqResolverGetNameInfoServiceSize();
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverHostNameResult(void)
+{
+ sqInt nameSize;
+ char *nameString;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+ nameString = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ nameSize = interpreterProxy->byteSizeOf(((sqInt)(long)(nameString) - 4));
+ sqResolverHostNameResultSize(nameString, nameSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverHostNameSize(void)
+{
+ sqInt size;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ size = sqResolverHostNameSize();
+ if (!(interpreterProxy->failed())) {
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
primitiveResolverLocalAddress(void)
{
sqInt addr;
@@ -396,7 +736,6 @@
{
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(0);
if (interpreterProxy->failed()) {
@@ -405,13 +744,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketAbortConnection(s);
}
@@ -430,8 +765,6 @@
sqInt semaIndex;
sqInt sendBufSize;
SocketPtr serverSocket;
- void *socketIndex;
- void *socketIndex1;
sqInt socketOop;
sqInt sockHandle;
@@ -445,25 +778,17 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(sockHandle))
&& ((interpreterProxy->byteSizeOf(sockHandle)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- serverSocket = null;
- goto l2;
- }
- socketIndex1 = ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle)));
- serverSocket = socketIndex1;
-l2: /* end socketValueOf: */;
+ serverSocket = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle))));
if (!(interpreterProxy->failed())) {
socketOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), socketRecordSize());
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
- l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketAcceptFromRecvBytesSendBytesSemaID(s, serverSocket, recvBufSize, sendBufSize, semaIndex);
}
if (interpreterProxy->failed()) {
@@ -483,8 +808,6 @@
sqInt semaIndex;
sqInt sendBufSize;
SocketPtr serverSocket;
- void *socketIndex;
- void *socketIndex1;
sqInt socketOop;
sqInt sockHandle;
@@ -500,25 +823,17 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(sockHandle))
&& ((interpreterProxy->byteSizeOf(sockHandle)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- serverSocket = null;
- goto l2;
- }
- socketIndex1 = ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle)));
- serverSocket = socketIndex1;
-l2: /* end socketValueOf: */;
+ serverSocket = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle))));
if (!(interpreterProxy->failed())) {
socketOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), socketRecordSize());
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
- l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketAcceptFromRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, serverSocket, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema);
}
if (interpreterProxy->failed()) {
@@ -529,6 +844,95 @@
}
EXPORT(sqInt)
+primitiveSocketAddressGetPort(void)
+{
+ sqInt addr;
+ char *addrBase;
+ sqInt addrSize;
+ sqInt port;
+ sqInt _return_value;
+
+ addr = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ addrSize = interpreterProxy->byteSizeOf(addr);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(addr)));
+ if (!(interpreterProxy->failed())) {
+ port = sqSocketAddressSizeGetPort(addrBase, addrSize);
+ if (!(interpreterProxy->failed())) {
+ _return_value = interpreterProxy->integerObjectOf(port);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveSocketAddressSetPort(void)
+{
+ sqInt addr;
+ char *addrBase;
+ sqInt addrSize;
+ sqInt portNumber;
+
+ portNumber = interpreterProxy->stackIntegerValue(0);
+ addr = interpreterProxy->stackValue(1);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ addrSize = interpreterProxy->byteSizeOf(addr);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(addr)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketAddressSizeSetPort(addrBase, addrSize, portNumber);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveSocketBindTo(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ SocketPtr s;
+ sqInt socket;
+ sqInt socketAddress;
+
+ socket = interpreterProxy->stackValue(1);
+ socketAddress = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketBindToAddressSize(s, addrBase, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
primitiveSocketBindToPort(void)
{
sqInt addr;
@@ -536,7 +940,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt sz;
socket = interpreterProxy->stackValue(2);
@@ -557,13 +960,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l2;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l2: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketBindToPort(s, addr, port);
}
@@ -579,7 +978,6 @@
{
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(0);
if (interpreterProxy->failed()) {
@@ -588,13 +986,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketCloseConnection(s);
}
@@ -610,7 +1004,6 @@
{
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt status;
sqInt _return_value;
@@ -621,13 +1014,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
status = sqSocketConnectionStatus(s);
}
@@ -640,6 +1029,38 @@
}
EXPORT(sqInt)
+primitiveSocketConnectTo(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ SocketPtr s;
+ sqInt socket;
+ sqInt socketAddress;
+
+ socket = interpreterProxy->stackValue(1);
+ socketAddress = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketConnectToAddressSize(s, addrBase, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
primitiveSocketConnectToPort(void)
{
sqInt addr;
@@ -648,7 +1069,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt sz;
socket = interpreterProxy->stackValue(2);
@@ -668,7 +1088,7 @@
l1: /* end netAddressToInt: */;
if (sCCTPfn != 0) {
okToConnect = ((int (*) (int, int)) sCCTPfn)(addr, port);
- if (!(okToConnect)) {
+ if (!okToConnect) {
interpreterProxy->primitiveFail();
return null;
}
@@ -676,13 +1096,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l2;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l2: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketConnectToPort(s, addr, port);
}
@@ -702,7 +1118,6 @@
SocketPtr s;
sqInt semaIndex;
sqInt sendBufSize;
- void *socketIndex;
sqInt socketOop;
sqInt socketType;
@@ -716,7 +1131,7 @@
}
if (sCCSOTfn != 0) {
okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, socketType);
- if (!(okToCreate)) {
+ if (!okToCreate) {
interpreterProxy->primitiveFail();
return null;
}
@@ -725,13 +1140,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex);
if (interpreterProxy->failed()) {
return null;
@@ -751,7 +1162,6 @@
SocketPtr s;
sqInt semaIndex;
sqInt sendBufSize;
- void *socketIndex;
sqInt socketOop;
sqInt socketType;
@@ -767,7 +1177,7 @@
}
if (sCCSOTfn != 0) {
okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, socketType);
- if (!(okToCreate)) {
+ if (!okToCreate) {
interpreterProxy->primitiveFail();
return null;
}
@@ -776,13 +1186,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema);
if (interpreterProxy->failed()) {
return null;
@@ -803,7 +1209,6 @@
SocketPtr s;
sqInt semaIndex;
sqInt sendBufSize;
- void *socketIndex;
sqInt socketOop;
netType = interpreterProxy->stackIntegerValue(6);
@@ -818,7 +1223,7 @@
}
if (sCCSOTfn != 0) {
okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, protoType);
- if (!(okToCreate)) {
+ if (!okToCreate) {
interpreterProxy->primitiveFail();
return null;
}
@@ -827,13 +1232,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketCreateRawProtoTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, protoType, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema);
if (interpreterProxy->failed()) {
return null;
@@ -847,7 +1248,6 @@
{
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(0);
if (interpreterProxy->failed()) {
@@ -856,13 +1256,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketDestroy(s);
}
@@ -879,7 +1275,6 @@
sqInt err;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -889,13 +1284,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
err = sqSocketError(s);
}
@@ -918,7 +1309,6 @@
sqInt returnedValue;
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(1);
optionName = interpreterProxy->stackValue(0);
@@ -928,13 +1318,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isBytes(optionName));
optionNameStart = ((char *) (interpreterProxy->firstIndexableField(optionName)));
optionNameSize = interpreterProxy->slotSizeOf(optionName);
@@ -968,7 +1354,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(1);
port = interpreterProxy->stackIntegerValue(0);
@@ -978,21 +1363,19 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (sCCLOPfn != 0) {
okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port);
- if (!(okToListen)) {
+ if (!okToListen) {
interpreterProxy->primitiveFail();
return null;
}
}
- sqSocketListenOnPort(s, port);
+ if (!(interpreterProxy->failed())) {
+ sqSocketListenOnPort(s, port);
+ }
if (interpreterProxy->failed()) {
return null;
}
@@ -1013,7 +1396,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(2);
port = interpreterProxy->stackIntegerValue(1);
@@ -1024,16 +1406,12 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (sCCLOPfn != 0) {
okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port);
- if (!(okToListen)) {
+ if (!okToListen) {
interpreterProxy->primitiveFail();
return null;
}
@@ -1062,7 +1440,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt sz;
socket = interpreterProxy->stackValue(3);
@@ -1076,16 +1453,12 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l2;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l2: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (sCCLOPfn != 0) {
okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port);
- if (!(okToListen)) {
+ if (!okToListen) {
interpreterProxy->primitiveFail();
return null;
}
@@ -1106,7 +1479,35 @@
return null;
}
+EXPORT(sqInt)
+primitiveSocketListenWithBacklog(void)
+{
+ sqInt backlogSize;
+ SocketPtr s;
+ sqInt socket;
+ socket = interpreterProxy->stackValue(1);
+ backlogSize = interpreterProxy->stackIntegerValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ if (!(interpreterProxy->failed())) {
+ sqSocketListenBacklog(s, backlogSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+
/* Backward compatibility */
EXPORT(sqInt)
@@ -1126,7 +1527,6 @@
sqInt addr;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1136,13 +1536,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
addr = sqSocketLocalAddress(s);
_return_value = intToNetAddress(addr);
if (interpreterProxy->failed()) {
@@ -1153,12 +1549,76 @@
}
EXPORT(sqInt)
+primitiveSocketLocalAddressResult(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ SocketPtr s;
+ sqInt socket;
+ sqInt socketAddress;
+
+ socket = interpreterProxy->stackValue(1);
+ socketAddress = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketLocalAddressResultSize(s, addrBase, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveSocketLocalAddressSize(void)
+{
+ SocketPtr s;
+ sqInt size;
+ sqInt socket;
+ sqInt _return_value;
+
+ socket = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ size = sqSocketLocalAddressSize(s);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(2, _return_value);
+ return null;
+}
+
+EXPORT(sqInt)
primitiveSocketLocalPort(void)
{
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1168,13 +1628,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
port = sqSocketLocalPort(s);
_return_value = interpreterProxy->integerObjectOf(port);
if (interpreterProxy->failed()) {
@@ -1190,7 +1646,6 @@
sqInt dataIsAvailable;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1200,13 +1655,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
dataIsAvailable = sqSocketReceiveDataAvailable(s);
_return_value = (dataIsAvailable) ? interpreterProxy->trueObject(): interpreterProxy->falseObject();
if (interpreterProxy->failed()) {
@@ -1227,7 +1678,6 @@
sqInt count;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt startIndex;
sqInt _return_value;
@@ -1241,13 +1691,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isWordsOrBytes(array));
if (interpreterProxy->isWords(array)) {
byteSize = 4;
@@ -1289,7 +1735,6 @@
sqInt results;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt startIndex;
socket = interpreterProxy->stackValue(3);
@@ -1302,13 +1747,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isWordsOrBytes(array));
if (interpreterProxy->isWords(array)) {
byteSize = 4;
@@ -1361,7 +1802,6 @@
sqInt addr;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1371,13 +1811,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
addr = sqSocketRemoteAddress(s);
_return_value = intToNetAddress(addr);
if (interpreterProxy->failed()) {
@@ -1388,12 +1824,76 @@
}
EXPORT(sqInt)
+primitiveSocketRemoteAddressResult(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ SocketPtr s;
+ sqInt socket;
+ sqInt socketAddress;
+
+ socket = interpreterProxy->stackValue(1);
+ socketAddress = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketRemoteAddressResultSize(s, addrBase, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveSocketRemoteAddressSize(void)
+{
+ SocketPtr s;
+ sqInt size;
+ sqInt socket;
+ sqInt _return_value;
+
+ socket = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ size = sqSocketRemoteAddressSize(s);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(2, _return_value);
+ return null;
+}
+
+EXPORT(sqInt)
primitiveSocketRemotePort(void)
{
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1403,13 +1903,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
port = sqSocketRemotePort(s);
_return_value = interpreterProxy->integerObjectOf(port);
if (interpreterProxy->failed()) {
@@ -1430,7 +1926,6 @@
sqInt count;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt startIndex;
sqInt _return_value;
@@ -1444,13 +1939,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isWordsOrBytes(array));
if (interpreterProxy->isWords(array)) {
byteSize = 4;
@@ -1483,7 +1974,6 @@
sqInt done;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1493,13 +1983,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
done = sqSocketSendDone(s);
_return_value = (done) ? interpreterProxy->trueObject(): interpreterProxy->falseObject();
if (interpreterProxy->failed()) {
@@ -1523,7 +2009,6 @@
sqInt portNumber;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt startIndex;
sqInt sz;
sqInt _return_value;
@@ -1541,13 +2026,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l2;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l2: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isWordsOrBytes(array));
if (interpreterProxy->isWords(array)) {
byteSize = 4;
@@ -1596,7 +2077,6 @@
sqInt returnedValue;
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(2);
optionName = interpreterProxy->stackValue(1);
@@ -1607,13 +2087,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isBytes(optionName));
optionNameStart = ((char *) (interpreterProxy->firstIndexableField(optionName)));
optionNameSize = interpreterProxy->slotSizeOf(optionName);
@@ -1677,15 +2153,11 @@
static SocketPtr
socketValueOf(sqInt socketOop)
{
- void *socketIndex;
-
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- return null;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- return socketIndex;
+ return (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
}
static void
@@ -1707,6 +2179,20 @@
{"SocketPlugin", "primitiveResolverAbortLookup", (void*)primitiveResolverAbortLookup},
{"SocketPlugin", "primitiveResolverAddressLookupResult", (void*)primitiveResolverAddressLookupResult},
{"SocketPlugin", "primitiveResolverError", (void*)primitiveResolverError},
+ {"SocketPlugin", "primitiveResolverGetAddressInfo", (void*)primitiveResolverGetAddressInfo},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoFamily", (void*)primitiveResolverGetAddressInfoFamily},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoNext", (void*)primitiveResolverGetAddressInfoNext},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoProtocol", (void*)primitiveResolverGetAddressInfoProtocol},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoResult", (void*)primitiveResolverGetAddressInfoResult},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoSize", (void*)primitiveResolverGetAddressInfoSize},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoType", (void*)primitiveResolverGetAddressInfoType},
+ {"SocketPlugin", "primitiveResolverGetNameInfo", (void*)primitiveResolverGetNameInfo},
+ {"SocketPlugin", "primitiveResolverGetNameInfoHostResult", (void*)primitiveResolverGetNameInfoHostResult},
+ {"SocketPlugin", "primitiveResolverGetNameInfoHostSize", (void*)primitiveResolverGetNameInfoHostSize},
+ {"SocketPlugin", "primitiveResolverGetNameInfoServiceResult", (void*)primitiveResolverGetNameInfoServiceResult},
+ {"SocketPlugin", "primitiveResolverGetNameInfoServiceSize", (void*)primitiveResolverGetNameInfoServiceSize},
+ {"SocketPlugin", "primitiveResolverHostNameResult", (void*)primitiveResolverHostNameResult},
+ {"SocketPlugin", "primitiveResolverHostNameSize", (void*)primitiveResolverHostNameSize},
{"SocketPlugin", "primitiveResolverLocalAddress", (void*)primitiveResolverLocalAddress},
{"SocketPlugin", "primitiveResolverNameLookupResult", (void*)primitiveResolverNameLookupResult},
{"SocketPlugin", "primitiveResolverStartAddressLookup", (void*)primitiveResolverStartAddressLookup},
@@ -1715,9 +2201,13 @@
{"SocketPlugin", "primitiveSocketAbortConnection", (void*)primitiveSocketAbortConnection},
{"SocketPlugin", "primitiveSocketAccept", (void*)primitiveSocketAccept},
{"SocketPlugin", "primitiveSocketAccept3Semaphores", (void*)primitiveSocketAccept3Semaphores},
+ {"SocketPlugin", "primitiveSocketAddressGetPort", (void*)primitiveSocketAddressGetPort},
+ {"SocketPlugin", "primitiveSocketAddressSetPort", (void*)primitiveSocketAddressSetPort},
+ {"SocketPlugin", "primitiveSocketBindTo", (void*)primitiveSocketBindTo},
{"SocketPlugin", "primitiveSocketBindToPort", (void*)primitiveSocketBindToPort},
{"SocketPlugin", "primitiveSocketCloseConnection", (void*)primitiveSocketCloseConnection},
{"SocketPlugin", "primitiveSocketConnectionStatus", (void*)primitiveSocketConnectionStatus},
+ {"SocketPlugin", "primitiveSocketConnectTo", (void*)primitiveSocketConnectTo},
{"SocketPlugin", "primitiveSocketConnectToPort", (void*)primitiveSocketConnectToPort},
{"SocketPlugin", "primitiveSocketCreate", (void*)primitiveSocketCreate},
{"SocketPlugin", "primitiveSocketCreate3Semaphores", (void*)primitiveSocketCreate3Semaphores},
@@ -1728,13 +2218,18 @@
{"SocketPlugin", "primitiveSocketListenOnPort", (void*)primitiveSocketListenOnPort},
{"SocketPlugin", "primitiveSocketListenOnPortBacklog", (void*)primitiveSocketListenOnPortBacklog},
{"SocketPlugin", "primitiveSocketListenOnPortBacklogInterface", (void*)primitiveSocketListenOnPortBacklogInterface},
+ {"SocketPlugin", "primitiveSocketListenWithBacklog", (void*)primitiveSocketListenWithBacklog},
{"SocketPlugin", "primitiveSocketListenWithOrWithoutBacklog", (void*)primitiveSocketListenWithOrWithoutBacklog},
{"SocketPlugin", "primitiveSocketLocalAddress", (void*)primitiveSocketLocalAddress},
+ {"SocketPlugin", "primitiveSocketLocalAddressResult", (void*)primitiveSocketLocalAddressResult},
+ {"SocketPlugin", "primitiveSocketLocalAddressSize", (void*)primitiveSocketLocalAddressSize},
{"SocketPlugin", "primitiveSocketLocalPort", (void*)primitiveSocketLocalPort},
{"SocketPlugin", "primitiveSocketReceiveDataAvailable", (void*)primitiveSocketReceiveDataAvailable},
{"SocketPlugin", "primitiveSocketReceiveDataBufCount", (void*)primitiveSocketReceiveDataBufCount},
{"SocketPlugin", "primitiveSocketReceiveUDPDataBufCount", (void*)primitiveSocketReceiveUDPDataBufCount},
{"SocketPlugin", "primitiveSocketRemoteAddress", (void*)primitiveSocketRemoteAddress},
+ {"SocketPlugin", "primitiveSocketRemoteAddressResult", (void*)primitiveSocketRemoteAddressResult},
+ {"SocketPlugin", "primitiveSocketRemoteAddressSize", (void*)primitiveSocketRemoteAddressSize},
{"SocketPlugin", "primitiveSocketRemotePort", (void*)primitiveSocketRemotePort},
{"SocketPlugin", "primitiveSocketSendDataBufCount", (void*)primitiveSocketSendDataBufCount},
{"SocketPlugin", "primitiveSocketSendDone", (void*)primitiveSocketSendDone},
Modified: branches/Cog/nscogsrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
===================================================================
--- branches/Cog/nscogsrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/nscogsrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -1,9 +1,9 @@
/* Automatically generated by
- VMPluginCodeGenerator VMMaker.oscog-eem.154 uuid: 5cbb57c7-0a54-4b7e-848c-1f292759f1fa
+ VMPluginCodeGenerator VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 uuid: 90d36152-4f89-4764-b476-2cc44c195139
+ UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 uuid: 15acec73-e0e7-4cc0-a521-1c4204a4b5b7
*/
-static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 uuid: 90d36152-4f89-4764-b476-2cc44c195139 " __DATE__ ;
+static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 uuid: 15acec73-e0e7-4cc0-a521-1c4204a4b5b7 " __DATE__ ;
@@ -109,6 +109,7 @@
EXPORT(sqInt) primitiveChdir(void);
EXPORT(sqInt) primitiveCreatePipe(void);
EXPORT(sqInt) primitiveCreatePipeWithSessionIdentifier(void);
+EXPORT(sqInt) primitiveDup(sqInt fileDescriptor);
EXPORT(sqInt) primitiveDupTo(sqInt oldFileDescriptor, sqInt newFileDescriptor);
EXPORT(sqInt) primitiveEnvironmentAt(void);
EXPORT(sqInt) primitiveEnvironmentAtSymbol(void);
@@ -249,9 +250,9 @@
struct VirtualMachine* interpreterProxy;
static const char *moduleName =
#ifdef SQUEAK_BUILTIN_PLUGIN
- "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 (i)"
+ "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 (i)"
#else
- "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 (e)"
+ "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 (e)"
#endif
;
static void *originalSigHandlers[NSIG];
@@ -1292,11 +1293,11 @@
path = transientCStringFromString(interpreterProxy->stackObjectValue(0));
if (chdir(path)) {
interpreterProxy->pop(2);
- interpreterProxy->push(interpreterProxy->nilObject());
+ interpreterProxy->pushInteger(errno);
}
else {
interpreterProxy->pop(2);
- interpreterProxy->pushInteger(errno);
+ interpreterProxy->push(interpreterProxy->nilObject());
}
}
@@ -1420,6 +1421,24 @@
}
+/* Call dup() to duplicate a file descriptor using the next available
+ descriptor. Answer
+ the new file descriptor or -1 on failure.
+ */
+
+EXPORT(sqInt)
+primitiveDup(sqInt fileDescriptor)
+{
+ sqInt fd;
+ int result;
+
+ fd = interpreterProxy->stackIntegerValue(0);
+ result = dup(fd);
+ interpreterProxy->pop(2);
+ interpreterProxy->pushInteger(result);
+}
+
+
/* Call dup2() to duplicate a file descriptor. Answer the duplicated file
descriptor or -1 on failure. */
@@ -4440,6 +4459,7 @@
{"UnixOSProcessPlugin", "primitiveChdir", (void*)primitiveChdir},
{"UnixOSProcessPlugin", "primitiveCreatePipe", (void*)primitiveCreatePipe},
{"UnixOSProcessPlugin", "primitiveCreatePipeWithSessionIdentifier", (void*)primitiveCreatePipeWithSessionIdentifier},
+ {"UnixOSProcessPlugin", "primitiveDup", (void*)primitiveDup},
{"UnixOSProcessPlugin", "primitiveDupTo", (void*)primitiveDupTo},
{"UnixOSProcessPlugin", "primitiveEnvironmentAt", (void*)primitiveEnvironmentAt},
{"UnixOSProcessPlugin", "primitiveEnvironmentAtSymbol", (void*)primitiveEnvironmentAtSymbol},
Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/nscogsrc/vm/cointerp.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -1916,7 +1916,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.159";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.161";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
@@ -22497,7 +22497,7 @@
/* This is a helper for primitiveObjectPointsTo so it *does not* check the
frameContext field because that is an implicit self-reference not present
- in the stale .
+ in the state .
*/
static sqInt
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -1919,7 +1919,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.159";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.161";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
@@ -22501,7 +22501,7 @@
/* This is a helper for primitiveObjectPointsTo so it *does not* check the
frameContext field because that is an implicit self-reference not present
- in the stale .
+ in the state .
*/
static sqInt
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
- Wed May 2 16:06:54 PDT 2012
+ Thu Jun 7 12:25:51 PDT 2012
Modified: branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c
===================================================================
--- branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -1,17 +1,17 @@
/* sqUnixSocket.c -- Unix socket support
*
- * Copyright (C) 1996-2006 by Ian Piumarta and other authors/contributors
+ * Copyright (C) 1996-2007 by Ian Piumarta and other authors/contributors
* listed elsewhere in this file.
* All rights reserved.
*
* This file is part of Unix Squeak.
*
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
@@ -20,9 +20,9 @@
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*/
/* Author: Ian.Piumarta at inria.fr
@@ -73,7 +73,9 @@
# include <time.h>
# endif
# include <sys/param.h>
+# include <sys/stat.h>
# include <sys/socket.h>
+# include <sys/un.h>
# include <netinet/in.h>
# include <netinet/udp.h>
# include <netinet/tcp.h>
@@ -104,7 +106,7 @@
};
# else /* !ACORN */
extern int aioLastTick, aioThisTick;
-# define FPRINTF(X) { aioThisTick= ioMSecs(); fprintf(stderr, "%8d %8d ", aioThisTick, aioThisTick - aioLastTick); aioLastTick= aioThisTick; fprintf X; }
+# define FPRINTF(X) { aioThisTick= ioLowResMSecs(); fprintf(stderr, "%8d %8d ", aioThisTick, aioThisTick - aioLastTick); aioLastTick= aioThisTick; fprintf X; }
# endif
#else /* !DEBUG */
# define FPRINTF(X)
@@ -117,6 +119,7 @@
#define UDPSocketType 1
#define RAWSocketType 2
+
/*** Resolver states ***/
#define ResolverUninitialised 0
@@ -142,6 +145,14 @@
static char localHostName[MAXHOSTNAMELEN];
static u_long localHostAddress; /* GROSS IPv4 ASSUMPTION! */
+union sockaddr_any
+{
+ struct sockaddr sa;
+ struct sockaddr_un saun;
+ struct sockaddr_in sin;
+ struct sockaddr_in6 sin6;
+};
+
typedef struct privateSocketStruct
{
int s; /* Unix socket */
@@ -150,7 +161,10 @@
int writeSema; /* write io notification semaphore */
int sockState; /* connection + data state */
int sockError; /* errno after socket error */
- struct sockaddr_in peer; /* default send/recv address for UDP */
+ union sockaddr_any peer; /* default send/recv address for UDP */
+ socklen_t peerSize; /* dynamic sizeof(peer) */
+ union sockaddr_any sender; /* sender address for last UDP receive */
+ socklen_t senderSize; /* dynamic sizeof(sender) */
int multiListen; /* whether to listen for multiple connections */
int acceptedSock; /* a connection that has been accepted */
} privateSocketStruct;
@@ -178,10 +192,11 @@
#define _PSP(S) (((S)->privateSocketPtr))
#define PSP(S) ((privateSocketStruct *)((S)->privateSocketPtr))
-#define SOCKET(S) (PSP(S)->s)
-#define SOCKETSTATE(S) (PSP(S)->sockState)
-#define SOCKETERROR(S) (PSP(S)->sockError)
-#define SOCKETPEER(S) (PSP(S)->peer)
+#define SOCKET(S) (PSP(S)->s)
+#define SOCKETSTATE(S) (PSP(S)->sockState)
+#define SOCKETERROR(S) (PSP(S)->sockError)
+#define SOCKETPEER(S) (PSP(S)->peer)
+#define SOCKETPEERSIZE(S) (PSP(S)->peerSize)
/*** Resolver state ***/
@@ -504,26 +519,34 @@
/* create a new socket */
-void sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(SocketPtr s, sqInt netType, sqInt socketType, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex)
+void sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(SocketPtr s, sqInt domain, sqInt socketType, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex)
{
- sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, socketType,recvBufSize, sendBufSize, semaIndex, semaIndex, semaIndex);
+ sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, domain, socketType,recvBufSize, sendBufSize, semaIndex, semaIndex, semaIndex);
}
-void sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(SocketPtr s, sqInt netType, sqInt socketType, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex, sqInt readSemaIndex, sqInt writeSemaIndex)
+void sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(SocketPtr s, sqInt domain, sqInt socketType, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex, sqInt readSemaIndex, sqInt writeSemaIndex)
{
int newSocket= -1;
privateSocketStruct *pss;
+ switch (domain)
+ {
+ case 0: domain= AF_INET; break; /* SQ_SOCKET_DOMAIN_UNSPECIFIED */
+ case 1: domain= AF_UNIX; break; /* SQ_SOCKET_DOMAIN_LOCAL */
+ case 2: domain= AF_INET; break; /* SQ_SOCKET_DOMAIN_INET4 */
+ case 3: domain= AF_INET6; break; /* SQ_SOCKET_DOMAIN_INET6 */
+ }
+
s->sessionID= 0;
if (TCPSocketType == socketType)
{
/* --- TCP --- */
- newSocket= socket(AF_INET, SOCK_STREAM, 0);
+ newSocket= socket(domain, SOCK_STREAM, 0);
}
else if (UDPSocketType == socketType)
{
/* --- UDP --- */
- newSocket= socket(AF_INET, SOCK_DGRAM, 0);
+ newSocket= socket(domain, SOCK_DGRAM, 0);
}
if (-1 == newSocket)
{
@@ -558,9 +581,9 @@
pss->sockError= 0;
/* initial UDP peer := wildcard */
memset(&pss->peer, 0, sizeof(pss->peer));
- pss->peer.sin_family= AF_INET;
- pss->peer.sin_port= 0;
- pss->peer.sin_addr.s_addr= INADDR_ANY;
+ pss->peer.sin.sin_family= AF_INET;
+ pss->peer.sin.sin_port= 0;
+ pss->peer.sin.sin_addr.s_addr= INADDR_ANY;
/* Squeak socket */
s->sessionID= thisNetSession;
s->socketType= socketType;
@@ -569,7 +592,7 @@
/* Note: socket is in BLOCKING mode until aioEnable is called for it! */
}
-void sqSocketCreateRawProtoTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(SocketPtr s, sqInt netType, sqInt protocol, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex, sqInt readSemaIndex, sqInt writeSemaIndex)
+void sqSocketCreateRawProtoTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(SocketPtr s, sqInt domain, sqInt protocol, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex, sqInt readSemaIndex, sqInt writeSemaIndex)
{
int newSocket= -1;
privateSocketStruct *pss;
@@ -605,9 +628,9 @@
pss->sockError= 0;
/* initial UDP peer := wildcard */
memset(&pss->peer, 0, sizeof(pss->peer));
- pss->peer.sin_family= AF_INET;
- pss->peer.sin_port= 0;
- pss->peer.sin_addr.s_addr= INADDR_ANY;
+ pss->peer.sin.sin_family= AF_INET;
+ pss->peer.sin.sin_port= 0;
+ pss->peer.sin.sin_addr.s_addr= INADDR_ANY;
/* Squeak socket */
s->sessionID= thisNetSession;
s->socketType= RAWSocketType;
@@ -718,7 +741,8 @@
/* --- UDP/RAW --- */
if (SOCKET(s) >= 0)
{
- memcpy((void *)&SOCKETPEER(s), (void *)&saddr, sizeof(SOCKETPEER(s)));
+ memcpy((void *)&SOCKETPEER(s), (void *)&saddr, sizeof(saddr));
+ SOCKETPEERSIZE(s)= sizeof(struct sockaddr_in);
SOCKETSTATE(s)= Connected;
}
}
@@ -931,7 +955,7 @@
return ntohl(saddr.sin_addr.s_addr);
}
/* --- UDP/RAW --- */
- return ntohl(SOCKETPEER(s).sin_addr.s_addr);
+ return ntohl(SOCKETPEER(s).sin.sin_addr.s_addr);
}
@@ -969,7 +993,7 @@
return ntohs(saddr.sin_port);
}
/* --- UDP/RAW --- */
- return ntohs(SOCKETPEER(s).sin_port);
+ return ntohs(SOCKETPEER(s).sin.sin_port);
}
@@ -1033,6 +1057,9 @@
if (!socketValid(s))
return -1;
+
+ SOCKETPEERSIZE(s)= 0;
+
if (TCPSocketType != s->socketType)
{
/* --- UDP/RAW --- */
@@ -1048,6 +1075,7 @@
FPRINTF((stderr, "UDP receiveData(%d) < 1 [a:%d]\n", SOCKET(s), errno));
return 0;
}
+ SOCKETPEERSIZE(s)= addrSize;
}
else
{
@@ -1129,7 +1157,7 @@
*/
sqInt sqSocketReceiveUDPDataBufCountaddressportmoreFlag(SocketPtr s, char *buf, sqInt bufSize, sqInt *address, sqInt *port, sqInt *moreFlag)
{
- if (socketValid(s) && (TCPSocketType != s->socketType))
+ if (socketValid(s) && (TCPSocketType != s->socketType)) /* --- UDP/RAW --- */
{
struct sockaddr_in saddr;
socklen_t addrSize= sizeof(saddr);
@@ -1403,6 +1431,7 @@
{
PSP(s)->sockError= errno;
interpreterProxy->success(false);
+ return;
}
}
@@ -1431,9 +1460,9 @@
sqInt sqResolverStatus(void)
{
- if(!thisNetSession)
+ if (!thisNetSession)
return ResolverUninitialised;
- if(lastError != 0)
+ if (lastError != 0)
return ResolverError;
return ResolverSuccess;
}
@@ -1467,3 +1496,703 @@
/* we're done before we even started */
interpreterProxy->signalSemaphoreWithIndex(resolverSema);
}
+
+
+/* ikp 2007-06-07: Generalised primitives for IPv6, &c. */
+
+/* flags */
+
+#define SQ_SOCKET_NUMERIC (1<<0)
+#define SQ_SOCKET_PASSIVE (1<<1)
+
+/* family */
+
+#define SQ_SOCKET_FAMILY_UNSPECIFIED 0
+#define SQ_SOCKET_FAMILY_LOCAL 1
+#define SQ_SOCKET_FAMILY_INET4 2
+#define SQ_SOCKET_FAMILY_INET6 3
+#define SQ_SOCKET_FAMILY_MAX 4
+
+/* type */
+
+#define SQ_SOCKET_TYPE_UNSPECIFIED 0
+#define SQ_SOCKET_TYPE_STREAM 1
+#define SQ_SOCKET_TYPE_DGRAM 2
+#define SQ_SOCKET_TYPE_MAX 3
+
+/* protocol */
+
+#define SQ_SOCKET_PROTOCOL_UNSPECIFIED 0
+#define SQ_SOCKET_PROTOCOL_TCP 1
+#define SQ_SOCKET_PROTOCOL_UDP 2
+#define SQ_SOCKET_PROTOCOL_MAX 3
+
+void sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol(char *hostName, sqInt hostSize, char *servName, sqInt servSize,
+ sqInt flags, sqInt family, sqInt type, sqInt protocol);
+sqInt sqResolverGetAddressInfoSize(void);
+void sqResolverGetAddressInfoResultSize(char *addr, sqInt addrSize);
+sqInt sqResolverGetAddressInfoFamily(void);
+sqInt sqResolverGetAddressInfoType(void);
+sqInt sqResolverGetAddressInfoProtocol(void);
+sqInt sqResolverGetAddressInfoNext(void);
+
+sqInt sqSocketAddressSizeGetPort(char *addr, sqInt addrSize);
+void sqSocketAddressSizeSetPort(char *addr, sqInt addrSize, sqInt port);
+
+void sqResolverGetNameInfoSizeFlags(char *addr, sqInt addrSize, sqInt flags);
+sqInt sqResolverGetNameInfoHostSize(void);
+void sqResolverGetNameInfoHostResultSize(char *name, sqInt nameSize);
+sqInt sqResolverGetNameInfoServiceSize(void);
+void sqResolverGetNameInfoServiceResultSize(char *name, sqInt nameSize);
+
+sqInt sqResolverHostNameSize(void);
+void sqResolverHostNameResultSize(char *name, sqInt nameSize);
+
+void sqSocketBindToAddressSize(SocketPtr s, char *addr, sqInt addrSize);
+void sqSocketListenBacklog(SocketPtr s, sqInt backlogSize);
+void sqSocketConnectToAddressSize(SocketPtr s, char *addr, sqInt addrSize);
+
+sqInt sqSocketLocalAddressSize(SocketPtr s);
+void sqSocketLocalAddressResultSize(SocketPtr s, char *addr, int addrSize);
+sqInt sqSocketRemoteAddressSize(SocketPtr s);
+void sqSocketRemoteAddressResultSize(SocketPtr s, char *addr, int addrSize);
+
+sqInt sqSocketSendUDPToSizeDataBufCount(SocketPtr s, char *addr, sqInt addrSize, char *buf, sqInt bufSize);
+sqInt sqSocketReceiveUDPDataBufCount(SocketPtr s, char *buf, sqInt bufSize);
+
+
+/* ---- address and service lookup ---- */
+
+
+static struct addrinfo *addrList= 0;
+static struct addrinfo *addrInfo= 0;
+static struct addrinfo *localInfo= 0;
+
+
+void sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol(char *hostName, sqInt hostSize, char *servName, sqInt servSize,
+ sqInt flags, sqInt family, sqInt type, sqInt protocol)
+{
+ char host[MAXHOSTNAMELEN+1], serv[MAXHOSTNAMELEN+1];
+ struct addrinfo request;
+ int gaiError= 0;
+
+ FPRINTF((stderr, "GetAddressInfo %d %d %d %d %d %d\n", hostSize, servSize, flags, family, type, protocol));
+
+ if (addrList)
+ {
+ freeaddrinfo(addrList);
+ addrList= addrInfo= 0;
+ }
+
+ if (localInfo)
+ {
+ free(localInfo->ai_addr);
+ free(localInfo);
+ localInfo= addrInfo= 0;
+ }
+
+ if ((!thisNetSession)
+ || (hostSize < 0) || (hostSize > MAXHOSTNAMELEN)
+ || (servSize < 0) || (servSize > MAXHOSTNAMELEN)
+ || (family < 0) || (family >= SQ_SOCKET_FAMILY_MAX)
+ || (type < 0) || (type >= SQ_SOCKET_TYPE_MAX)
+ || (protocol < 0) || (protocol >= SQ_SOCKET_PROTOCOL_MAX))
+ goto fail;
+
+ if (hostSize)
+ memcpy(host, hostName, hostSize);
+ host[hostSize]= '\0';
+
+ if (servSize)
+ memcpy(serv, servName, servSize);
+ serv[servSize]= '\0';
+
+ FPRINTF((stderr, " -> GetAddressInfo %s %s\n", host, serv));
+
+ if (servSize && (family == SQ_SOCKET_FAMILY_LOCAL) && (servSize < (int)sizeof(((struct sockaddr_un *)0)->sun_path)) && !(flags & SQ_SOCKET_NUMERIC))
+ {
+ struct stat st;
+ if ((0 == stat(servName, &st)) && (st.st_mode & S_IFSOCK))
+ {
+ struct sockaddr_un *saun= calloc(1, sizeof(struct sockaddr_un));
+ localInfo= (struct addrinfo *)calloc(1, sizeof(struct addrinfo));
+ localInfo->ai_family= AF_UNIX;
+ localInfo->ai_socktype= SOCK_STREAM;
+ localInfo->ai_addrlen= sizeof(struct sockaddr_un);
+ localInfo->ai_addr= (struct sockaddr *)saun;
+ /*saun->sun_len= sizeof(struct sockaddr_un);*/
+ saun->sun_family= AF_UNIX;
+ memcpy(saun->sun_path, servName, servSize);
+ saun->sun_path[servSize]= '\0';
+ addrInfo= localInfo;
+ interpreterProxy->signalSemaphoreWithIndex(resolverSema);
+ return;
+ }
+ }
+
+ memset(&request, 0, sizeof(request));
+
+ if (flags & SQ_SOCKET_NUMERIC) request.ai_flags |= AI_NUMERICHOST;
+ if (flags & SQ_SOCKET_PASSIVE) request.ai_flags |= AI_PASSIVE;
+
+ switch (family)
+ {
+ case SQ_SOCKET_FAMILY_LOCAL: request.ai_family= AF_UNIX; break;
+ case SQ_SOCKET_FAMILY_INET4: request.ai_family= AF_INET; break;
+ case SQ_SOCKET_FAMILY_INET6: request.ai_family= AF_INET6; break;
+ }
+
+ switch (type)
+ {
+ case SQ_SOCKET_TYPE_STREAM: request.ai_socktype= SOCK_STREAM; break;
+ case SQ_SOCKET_TYPE_DGRAM: request.ai_socktype= SOCK_DGRAM; break;
+ }
+
+ switch (protocol)
+ {
+ case SQ_SOCKET_PROTOCOL_TCP: request.ai_protocol= IPPROTO_TCP; break;
+ case SQ_SOCKET_PROTOCOL_UDP: request.ai_protocol= IPPROTO_UDP; break;
+ }
+
+ gaiError= getaddrinfo(hostSize ? host : 0, servSize ? serv : 0, &request, &addrList);
+
+ if (gaiError)
+ {
+ /* Linux gives you either <netdb.h> with correct NI_* bit definitions and no EAI_* definitions at all
+ or <bind/netdb.h> with incorrect NI_* bit definitions and the EAI_* definitions we need.
+ We cannot distinguish between impossible constraints and genuine lookup failure, so err conservatively. */
+# if defined(EAI_BADHINTS)
+ if (EAI_BADHINTS != gaiError)
+ {
+ fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(gaiError));
+ lastError= gaiError;
+ goto fail;
+ }
+# else
+ fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(gaiError));
+# endif
+ addrList= 0; /* succeed with zero results for impossible constraints */
+ }
+
+ addrInfo= addrList;
+ interpreterProxy->signalSemaphoreWithIndex(resolverSema);
+ return;
+
+ fail:
+ interpreterProxy->success(false);
+ return;
+}
+
+
+struct addressHeader
+{
+ int sessionID;
+ int size;
+};
+
+#define AddressHeaderSize sizeof(struct addressHeader)
+
+#define addressHeader(A) ((struct addressHeader *)(A))
+#define socketAddress(A) ((struct sockaddr *)((char *)(A) + AddressHeaderSize))
+
+#define addressValid(A, S) (thisNetSession && (thisNetSession == addressHeader(A)->sessionID) && (addressHeader(A)->size == (int)((S) - AddressHeaderSize)))
+#define addressSize(A) (addressHeader(A)->size)
+
+
+#if 0
+static void dumpAddr(struct sockaddr *addr, int addrSize)
+{
+ int i;
+ for (i= 0; i < addrSize; ++i)
+ fprintf(stderr, "%02x ", ((unsigned char *)addr)[i]);
+ fprintf(stderr, " ");
+ switch (addr->sa_family)
+ {
+ case AF_UNIX: fprintf(stderr, "local\n"); break;
+ case AF_INET: fprintf(stderr, "inet\n"); break;
+ case AF_INET6: fprintf(stderr, "inet6\n"); break;
+ default: fprintf(stderr, "?\n"); break;
+ }
+}
+#endif
+
+sqInt sqResolverGetAddressInfoSize(void)
+{
+ if (!addrInfo)
+ return -1;
+ return AddressHeaderSize + addrInfo->ai_addrlen;
+}
+
+
+void sqResolverGetAddressInfoResultSize(char *addr, sqInt addrSize)
+{
+ if ((!addrInfo) || (addrSize < (int)(AddressHeaderSize + addrInfo->ai_addrlen)))
+ {
+ interpreterProxy->success(false);
+ return;
+ }
+
+ addressHeader(addr)->sessionID= thisNetSession;
+ addressHeader(addr)->size= addrInfo->ai_addrlen;
+ memcpy(socketAddress(addr), addrInfo->ai_addr, addrInfo->ai_addrlen);
+ /*dumpAddr(socketAddress(addr), addrSize - AddressHeaderSize);*/
+}
+
+
+sqInt sqResolverGetAddressInfoFamily(void)
+{
+ if (!addrInfo)
+ {
+ interpreterProxy->success(false);
+ return 0;
+ }
+
+ switch (addrInfo->ai_family)
+ {
+ case AF_UNIX: return SQ_SOCKET_FAMILY_LOCAL;
+ case AF_INET: return SQ_SOCKET_FAMILY_INET4;
+ case AF_INET6: return SQ_SOCKET_FAMILY_INET6;
+ }
+
+ return SQ_SOCKET_FAMILY_UNSPECIFIED;
+}
+
+
+sqInt sqResolverGetAddressInfoType(void)
+{
+ if (!addrInfo)
+ {
+ interpreterProxy->success(false);
+ return 0;
+ }
+
+ switch (addrInfo->ai_socktype)
+ {
+ case SOCK_STREAM: return SQ_SOCKET_TYPE_STREAM;
+ case SOCK_DGRAM: return SQ_SOCKET_TYPE_DGRAM;
+ }
+
+ return SQ_SOCKET_TYPE_UNSPECIFIED;
+}
+
+
+sqInt sqResolverGetAddressInfoProtocol(void)
+{
+ if (!addrInfo)
+ {
+ interpreterProxy->success(false);
+ return 0;
+ }
+
+ switch (addrInfo->ai_protocol)
+ {
+ case IPPROTO_TCP: return SQ_SOCKET_PROTOCOL_TCP;
+ case IPPROTO_UDP: return SQ_SOCKET_PROTOCOL_UDP;
+ }
+
+ return SQ_SOCKET_PROTOCOL_UNSPECIFIED;
+}
+
+
+sqInt sqResolverGetAddressInfoNext(void)
+{
+ return (addrInfo && (addrInfo= addrInfo->ai_next)) ? true : false;
+}
+
+
+/* ---- address manipulation ---- */
+
+
+sqInt sqSocketAddressSizeGetPort(char *addr, sqInt addrSize)
+{
+ if (addressValid(addr, addrSize))
+ switch (socketAddress(addr)->sa_family)
+ {
+ case AF_INET: return ntohs(((struct sockaddr_in *)socketAddress(addr))->sin_port);
+ case AF_INET6: return ntohs(((struct sockaddr_in6 *)socketAddress(addr))->sin6_port);
+ }
+
+ interpreterProxy->success(false);
+ return 0;
+}
+
+
+void sqSocketAddressSizeSetPort(char *addr, sqInt addrSize, sqInt port)
+{
+ if (addressValid(addr, addrSize))
+ switch (socketAddress(addr)->sa_family)
+ {
+ case AF_INET: ((struct sockaddr_in *)socketAddress(addr))->sin_port= htons(port); return;
+ case AF_INET6: ((struct sockaddr_in6 *)socketAddress(addr))->sin6_port= htons(port); return;
+ }
+
+ interpreterProxy->success(false);
+}
+
+
+/* ---- host name lookup ---- */
+
+
+static char hostNameInfo[MAXHOSTNAMELEN+1];
+static char servNameInfo[MAXHOSTNAMELEN+1];
+
+static int nameInfoValid= 0;
+
+
+void sqResolverGetNameInfoSizeFlags(char *addr, sqInt addrSize, sqInt flags)
+{
+ int niFlags= 0;
+ int gaiError= 0;
+
+ FPRINTF((stderr, "GetNameInfoSizeFlags %p %d %d\n", addr, addrSize, flags));
+
+ nameInfoValid= 0;
+
+ if (!addressValid(addr, addrSize))
+ goto fail;
+
+ niFlags |= NI_NOFQDN;
+
+ if (flags & SQ_SOCKET_NUMERIC) niFlags |= (NI_NUMERICHOST | NI_NUMERICSERV);
+
+ /*dumpAddr(socketAddress(addr), addrSize - AddressHeaderSize); fprintf(stderr, "%02x\n", niFlags);*/
+
+ gaiError= getnameinfo(socketAddress(addr), addrSize - AddressHeaderSize,
+ hostNameInfo, sizeof(hostNameInfo),
+ servNameInfo, sizeof(servNameInfo),
+ niFlags);
+
+ if (gaiError)
+ {
+ fprintf(stderr, "getnameinfo: %s\n", gai_strerror(gaiError));
+ lastError= gaiError;
+ goto fail;
+ }
+
+ nameInfoValid= 1;
+ interpreterProxy->signalSemaphoreWithIndex(resolverSema);
+ return;
+
+ fail:
+ interpreterProxy->success(false);
+}
+
+
+sqInt sqResolverGetNameInfoHostSize(void)
+{
+ if (!nameInfoValid)
+ {
+ interpreterProxy->success(false);
+ return 0;
+ }
+ return strlen(hostNameInfo);
+}
+
+
+void sqResolverGetNameInfoHostResultSize(char *name, sqInt nameSize)
+{
+ int len;
+
+ if (!nameInfoValid)
+ goto fail;
+
+ len= strlen(hostNameInfo);
+ if (nameSize < len)
+ goto fail;
+
+ memcpy(name, hostNameInfo, len);
+ return;
+
+ fail:
+ interpreterProxy->success(false);
+}
+
+
+sqInt sqResolverGetNameInfoServiceSize(void)
+{
+ if (!nameInfoValid)
+ {
+ interpreterProxy->success(false);
+ return 0;
+ }
+ return strlen(servNameInfo);
+}
+
+
+void sqResolverGetNameInfoServiceResultSize(char *name, sqInt nameSize)
+{
+ int len;
+
+ if (!nameInfoValid)
+ goto fail;
+
+ len= strlen(servNameInfo);
+ if (nameSize < len)
+ goto fail;
+
+ memcpy(name, servNameInfo, len);
+ return;
+
+ fail:
+ interpreterProxy->success(false);
+}
+
+
+sqInt sqResolverHostNameSize(void)
+{
+ char buf[MAXHOSTNAMELEN+1];
+ if (gethostname(buf, sizeof(buf)))
+ {
+ interpreterProxy->success(false);
+ return 0;
+ }
+ return strlen(buf);
+}
+
+
+void sqResolverHostNameResultSize(char *name, sqInt nameSize)
+{
+ char buf[MAXHOSTNAMELEN+1];
+ int len;
+ if (gethostname(buf, sizeof(buf)) || (nameSize < (len= strlen(buf))))
+ {
+ interpreterProxy->success(false);
+ return;
+ }
+ memcpy(name, buf, len);
+}
+
+
+/* ---- circuit setup ---- */
+
+
+void sqSocketBindToAddressSize(SocketPtr s, char *addr, sqInt addrSize)
+{
+ privateSocketStruct *pss= PSP(s);
+
+ if (!(socketValid(s) && addressValid(addr, addrSize)))
+ goto fail;
+
+ if (bind(SOCKET(s), socketAddress(addr), addressSize(addr)) == 0)
+ return;
+
+ pss->sockError= errno;
+
+ fail:
+ interpreterProxy->success(false);
+}
+
+
+void sqSocketListenBacklog(SocketPtr s, sqInt backlogSize)
+{
+ if (!socketValid(s))
+ goto fail;
+
+ if ((backlogSize > 1) && (s->socketType != TCPSocketType))
+ goto fail;
+
+ PSP(s)->multiListen= (backlogSize > 1);
+
+ FPRINTF((stderr, "listenBacklog(%d, %d)\n", SOCKET(s), backlogSize));
+
+ if (TCPSocketType == s->socketType)
+ {
+ listen(SOCKET(s), backlogSize); /* acceptHandler catches errors */
+ SOCKETSTATE(s)= WaitingForConnection;
+ aioEnable(SOCKET(s), PSP(s), 0);
+ aioHandle(SOCKET(s), acceptHandler, AIO_RX); /* R => accept() */
+ }
+
+ return;
+
+ fail:
+ interpreterProxy->success(false);
+ return;
+}
+
+
+void sqSocketConnectToAddressSize(SocketPtr s, char *addr, sqInt addrSize)
+{
+ /* TCP => open a connection.
+ * UDP => set remote address.
+ */
+ if (!(socketValid(s) && addressValid(addr, addrSize)))
+ {
+ interpreterProxy->success(false);
+ return;
+ }
+
+ FPRINTF((stderr, "connectToAddressSize(%d)\n", SOCKET(s)));
+
+ if (TCPSocketType != s->socketType) /* --- UDP/RAW --- */
+ {
+ if (SOCKET(s) >= 0)
+ {
+ memcpy((void *)&SOCKETPEER(s), socketAddress(addr), addressSize(addr));
+ SOCKETPEERSIZE(s)= addressSize(addr);
+ SOCKETSTATE(s)= Connected;
+ }
+ }
+ else /* --- TCP --- */
+ {
+ int result;
+ aioEnable(SOCKET(s), PSP(s), 0);
+ result= connect(SOCKET(s), socketAddress(addr), addressSize(addr));
+ FPRINTF((stderr, "connect() => %d\n", result));
+ if (result == 0)
+ {
+ /* connection completed synchronously */
+ SOCKETSTATE(s)= Connected;
+ notify(PSP(s), CONN_NOTIFY);
+ setLinger(SOCKET(s), 1);
+ }
+ else
+ {
+ if (errno == EINPROGRESS || errno == EWOULDBLOCK)
+ {
+ /* asynchronous connection in progress */
+ SOCKETSTATE(s)= WaitingForConnection;
+ aioHandle(SOCKET(s), connectHandler, AIO_WX); /* W => connect() */
+ }
+ else
+ {
+ /* connection error */
+ perror("sqConnectToAddressSize");
+ SOCKETSTATE(s)= Unconnected;
+ SOCKETERROR(s)= errno;
+ notify(PSP(s), CONN_NOTIFY);
+ }
+ }
+ }
+}
+
+
+sqInt sqSocketLocalAddressSize(SocketPtr s)
+{
+ union sockaddr_any saddr;
+ socklen_t saddrSize= sizeof(saddr);
+
+ if (!socketValid(s))
+ return -1;
+
+ if (getsockname(SOCKET(s), &saddr.sa, &saddrSize))
+ return 0;
+
+ return AddressHeaderSize + saddrSize;
+}
+
+
+void sqSocketLocalAddressResultSize(SocketPtr s, char *addr, int addrSize)
+{
+ union sockaddr_any saddr;
+ socklen_t saddrSize= sizeof(saddr);
+
+ if (!socketValid(s))
+ goto fail;
+
+ if (getsockname(SOCKET(s), &saddr.sa, &saddrSize))
+ goto fail;
+
+ if (addrSize != (int)(AddressHeaderSize + saddrSize))
+ goto fail;
+
+ addressHeader(addr)->sessionID= thisNetSession;
+ addressHeader(addr)->size= saddrSize;
+ memcpy(socketAddress(addr), &saddr.sa, saddrSize);
+ return;
+
+ fail:
+ interpreterProxy->success(false);
+ return;
+}
+
+
+sqInt sqSocketRemoteAddressSize(SocketPtr s)
+{
+ union sockaddr_any saddr;
+ socklen_t saddrSize= sizeof(saddr);
+
+ if (!socketValid(s))
+ return -1;
+
+ if (TCPSocketType == s->socketType) /* --- TCP --- */
+ {
+ if (0 == getpeername(SOCKET(s), &saddr.sa, &saddrSize))
+ {
+ if (saddrSize < sizeof(SOCKETPEER(s)))
+ {
+ memcpy(&SOCKETPEER(s), &saddr.sa, saddrSize);
+ return AddressHeaderSize + (SOCKETPEERSIZE(s)= saddrSize);
+ }
+ }
+ }
+ else if (SOCKETPEERSIZE(s)) /* --- UDP/RAW --- */
+ {
+ return AddressHeaderSize + SOCKETPEERSIZE(s);
+ }
+
+ return -1;
+}
+
+
+void sqSocketRemoteAddressResultSize(SocketPtr s, char *addr, int addrSize)
+{
+ if (!socketValid(s)
+ || !SOCKETPEERSIZE(s)
+ || (addrSize != (int)(AddressHeaderSize + SOCKETPEERSIZE(s)))) {
+ interpreterProxy->success(false);
+ return;
+ }
+
+ addressHeader(addr)->sessionID= thisNetSession;
+ addressHeader(addr)->size= SOCKETPEERSIZE(s);
+ memcpy(socketAddress(addr), &SOCKETPEER(s), SOCKETPEERSIZE(s));
+ SOCKETPEERSIZE(s)= 0;
+}
+
+
+/* ---- communication ---- */
+
+
+sqInt sqSocketSendUDPToSizeDataBufCount(SocketPtr s, char *addr, sqInt addrSize, char *buf, sqInt bufSize)
+{
+ FPRINTF((stderr, "sendTo(%d)\n", SOCKET(s)));
+ if (socketValid(s) && addressValid(addr, addrSize) && (TCPSocketType != s->socketType)) /* --- UDP/RAW --- */
+ {
+ int nsent= sendto(SOCKET(s), buf, bufSize, 0, socketAddress(addr), addrSize - AddressHeaderSize);
+ if (nsent >= 0)
+ return nsent;
+
+ if (errno == EWOULDBLOCK) /* asynchronous write in progress */
+ return 0;
+
+ FPRINTF((stderr, "UDP send failed\n"));
+ SOCKETERROR(s)= errno;
+ }
+
+ interpreterProxy->success(false);
+ return 0;
+}
+
+
+sqInt sqSocketReceiveUDPDataBufCount(SocketPtr s, char *buf, sqInt bufSize)
+{
+ FPRINTF((stderr, "recvFrom(%d)\n", SOCKET(s)));
+ if (socketValid(s) && (TCPSocketType != s->socketType)) /* --- UDP/RAW --- */
+ {
+ socklen_t saddrSize= sizeof(SOCKETPEER(s));
+ int nread= recvfrom(SOCKET(s), buf, bufSize, 0, &SOCKETPEER(s).sa, &saddrSize);
+ if (nread >= 0)
+ {
+ SOCKETPEERSIZE(s)= saddrSize;
+ return nread;
+ }
+ SOCKETPEERSIZE(s)= 0;
+ if (errno == EWOULDBLOCK) /* asynchronous read in progress */
+ return 0;
+ SOCKETERROR(s)= errno;
+ FPRINTF((stderr, "receiveData(%d)= %da\n", SOCKET(s), 0));
+ }
+ interpreterProxy->success(false);
+ return 0;
+}
Added: branches/Cog/processors/IA32/linuxbochs/bochsconfig.h
===================================================================
--- branches/Cog/processors/IA32/linuxbochs/bochsconfig.h (rev 0)
+++ branches/Cog/processors/IA32/linuxbochs/bochsconfig.h 2012-06-07 19:29:52 UTC (rev 2556)
@@ -0,0 +1 @@
+link config.h
\ No newline at end of file
Property changes on: branches/Cog/processors/IA32/linuxbochs/bochsconfig.h
___________________________________________________________________
Added: svn:special
+ *
Modified: branches/Cog/src/plugins/SocketPlugin/SocketPlugin.c
===================================================================
--- branches/Cog/src/plugins/SocketPlugin/SocketPlugin.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/src/plugins/SocketPlugin/SocketPlugin.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -1,9 +1,9 @@
/* Automatically generated by
- SmartSyntaxPluginCodeGenerator VMMaker-oscog.40 uuid: 637db40c-33c6-4263-816e-1b8cc19e3c99
+ SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- SocketPlugin VMMaker-oscog.40 uuid: 637db40c-33c6-4263-816e-1b8cc19e3c99
+ SocketPlugin VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
*/
-static char __buildInfo[] = "SocketPlugin VMMaker-oscog.40 uuid: 637db40c-33c6-4263-816e-1b8cc19e3c99 " __DATE__ ;
+static char __buildInfo[] = "SocketPlugin VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ;
@@ -38,6 +38,8 @@
/*** Constants ***/
+#define BytesPerWord 4
+#define MULTIPLEBYTECODESETS 0
/*** Function Prototypes ***/
@@ -55,6 +57,20 @@
EXPORT(sqInt) primitiveResolverAbortLookup(void);
EXPORT(sqInt) primitiveResolverAddressLookupResult(void);
EXPORT(sqInt) primitiveResolverError(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfo(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoFamily(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoNext(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoProtocol(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoResult(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoSize(void);
+EXPORT(sqInt) primitiveResolverGetAddressInfoType(void);
+EXPORT(sqInt) primitiveResolverGetNameInfo(void);
+EXPORT(sqInt) primitiveResolverGetNameInfoHostResult(void);
+EXPORT(sqInt) primitiveResolverGetNameInfoHostSize(void);
+EXPORT(sqInt) primitiveResolverGetNameInfoServiceResult(void);
+EXPORT(sqInt) primitiveResolverGetNameInfoServiceSize(void);
+EXPORT(sqInt) primitiveResolverHostNameResult(void);
+EXPORT(sqInt) primitiveResolverHostNameSize(void);
EXPORT(sqInt) primitiveResolverLocalAddress(void);
EXPORT(sqInt) primitiveResolverNameLookupResult(void);
EXPORT(sqInt) primitiveResolverStartAddressLookup(void);
@@ -63,9 +79,13 @@
EXPORT(sqInt) primitiveSocketAbortConnection(void);
EXPORT(sqInt) primitiveSocketAccept(void);
EXPORT(sqInt) primitiveSocketAccept3Semaphores(void);
+EXPORT(sqInt) primitiveSocketAddressGetPort(void);
+EXPORT(sqInt) primitiveSocketAddressSetPort(void);
+EXPORT(sqInt) primitiveSocketBindTo(void);
EXPORT(sqInt) primitiveSocketBindToPort(void);
EXPORT(sqInt) primitiveSocketCloseConnection(void);
EXPORT(sqInt) primitiveSocketConnectionStatus(void);
+EXPORT(sqInt) primitiveSocketConnectTo(void);
EXPORT(sqInt) primitiveSocketConnectToPort(void);
EXPORT(sqInt) primitiveSocketCreate(void);
EXPORT(sqInt) primitiveSocketCreate3Semaphores(void);
@@ -76,13 +96,18 @@
EXPORT(sqInt) primitiveSocketListenOnPort(void);
EXPORT(sqInt) primitiveSocketListenOnPortBacklog(void);
EXPORT(sqInt) primitiveSocketListenOnPortBacklogInterface(void);
+EXPORT(sqInt) primitiveSocketListenWithBacklog(void);
EXPORT(sqInt) primitiveSocketListenWithOrWithoutBacklog(void);
EXPORT(sqInt) primitiveSocketLocalAddress(void);
+EXPORT(sqInt) primitiveSocketLocalAddressResult(void);
+EXPORT(sqInt) primitiveSocketLocalAddressSize(void);
EXPORT(sqInt) primitiveSocketLocalPort(void);
EXPORT(sqInt) primitiveSocketReceiveDataAvailable(void);
EXPORT(sqInt) primitiveSocketReceiveDataBufCount(void);
EXPORT(sqInt) primitiveSocketReceiveUDPDataBufCount(void);
EXPORT(sqInt) primitiveSocketRemoteAddress(void);
+EXPORT(sqInt) primitiveSocketRemoteAddressResult(void);
+EXPORT(sqInt) primitiveSocketRemoteAddressSize(void);
EXPORT(sqInt) primitiveSocketRemotePort(void);
EXPORT(sqInt) primitiveSocketSendDataBufCount(void);
EXPORT(sqInt) primitiveSocketSendDone(void);
@@ -103,9 +128,9 @@
struct VirtualMachine* interpreterProxy;
static const char *moduleName =
#ifdef SQUEAK_BUILTIN_PLUGIN
- "SocketPlugin VMMaker-oscog.40 (i)"
+ "SocketPlugin VMMaker.oscog-eem.161 (i)"
#else
- "SocketPlugin VMMaker-oscog.40 (e)"
+ "SocketPlugin VMMaker.oscog-eem.161 (e)"
#endif
;
static void * sCCLOPfn;
@@ -182,7 +207,7 @@
moduleUnloaded(char *aModuleName)
{
if ((strcmp(aModuleName, "SecurityPlugin")) == 0) {
- sDSAfn = sHSAfn = sCCTPfn = sCCLOPfn = sCCSOTfn = 0;
+ sDSAfn = (sHSAfn = (sCCTPfn = (sCCLOPfn = (sCCSOTfn = 0))));
}
}
@@ -295,6 +320,321 @@
}
EXPORT(sqInt)
+primitiveResolverGetAddressInfo(void)
+{
+ sqInt family;
+ sqInt flags;
+ char *hostName;
+ sqInt hostSize;
+ sqInt protocol;
+ char *servName;
+ sqInt servSize;
+ sqInt type;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(5)));
+ hostName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(5))));
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(4)));
+ servName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(4))));
+ flags = interpreterProxy->stackIntegerValue(3);
+ family = interpreterProxy->stackIntegerValue(2);
+ type = interpreterProxy->stackIntegerValue(1);
+ protocol = interpreterProxy->stackIntegerValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ hostSize = interpreterProxy->byteSizeOf(((sqInt)(long)(hostName) - 4));
+ servSize = interpreterProxy->byteSizeOf(((sqInt)(long)(servName) - 4));
+ sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol(hostName, hostSize, servName, servSize, flags, family, type, protocol);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(6);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoFamily(void)
+{
+ sqInt family;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ family = sqResolverGetAddressInfoFamily();
+ _return_value = interpreterProxy->integerObjectOf(family);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoNext(void)
+{
+ sqInt more;
+ sqInt _return_value;
+
+ more = sqResolverGetAddressInfoNext();
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ _return_value = (more) ? interpreterProxy->trueObject(): interpreterProxy->falseObject();
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoProtocol(void)
+{
+ sqInt protocol;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ protocol = sqResolverGetAddressInfoProtocol();
+ _return_value = interpreterProxy->integerObjectOf(protocol);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoResult(void)
+{
+ sqInt addrSize;
+ char *socketAddress;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+ socketAddress = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketAddress) - 4));
+ sqResolverGetAddressInfoResultSize(socketAddress, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoSize(void)
+{
+ sqInt size;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ size = sqResolverGetAddressInfoSize();
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetAddressInfoType(void)
+{
+ sqInt type;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ type = sqResolverGetAddressInfoType();
+ _return_value = interpreterProxy->integerObjectOf(type);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfo(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ sqInt flags;
+ sqInt socketAddress;
+
+ socketAddress = interpreterProxy->stackValue(1);
+ flags = interpreterProxy->stackIntegerValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ sqResolverGetNameInfoSizeFlags(addrBase, addrSize, flags);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfoHostResult(void)
+{
+ sqInt addrSize;
+ char *socketName;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+ socketName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketName) - 4));
+ sqResolverGetNameInfoHostResultSize(socketName, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfoHostSize(void)
+{
+ sqInt size;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ size = sqResolverGetNameInfoHostSize();
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfoServiceResult(void)
+{
+ sqInt addrSize;
+ char *socketName;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+ socketName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketName) - 4));
+ sqResolverGetNameInfoServiceResultSize(socketName, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverGetNameInfoServiceSize(void)
+{
+ sqInt size;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ size = sqResolverGetNameInfoServiceSize();
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverHostNameResult(void)
+{
+ sqInt nameSize;
+ char *nameString;
+
+ interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+ nameString = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ if (!(interpreterProxy->failed())) {
+ nameSize = interpreterProxy->byteSizeOf(((sqInt)(long)(nameString) - 4));
+ sqResolverHostNameResultSize(nameString, nameSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveResolverHostNameSize(void)
+{
+ sqInt size;
+ sqInt _return_value;
+
+ if (!(interpreterProxy->failed())) {
+ size = sqResolverHostNameSize();
+ if (!(interpreterProxy->failed())) {
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
primitiveResolverLocalAddress(void)
{
sqInt addr;
@@ -396,7 +736,6 @@
{
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(0);
if (interpreterProxy->failed()) {
@@ -405,13 +744,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketAbortConnection(s);
}
@@ -430,8 +765,6 @@
sqInt semaIndex;
sqInt sendBufSize;
SocketPtr serverSocket;
- void *socketIndex;
- void *socketIndex1;
sqInt socketOop;
sqInt sockHandle;
@@ -445,25 +778,17 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(sockHandle))
&& ((interpreterProxy->byteSizeOf(sockHandle)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- serverSocket = null;
- goto l2;
- }
- socketIndex1 = ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle)));
- serverSocket = socketIndex1;
-l2: /* end socketValueOf: */;
+ serverSocket = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle))));
if (!(interpreterProxy->failed())) {
socketOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), socketRecordSize());
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
- l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketAcceptFromRecvBytesSendBytesSemaID(s, serverSocket, recvBufSize, sendBufSize, semaIndex);
}
if (interpreterProxy->failed()) {
@@ -483,8 +808,6 @@
sqInt semaIndex;
sqInt sendBufSize;
SocketPtr serverSocket;
- void *socketIndex;
- void *socketIndex1;
sqInt socketOop;
sqInt sockHandle;
@@ -500,25 +823,17 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(sockHandle))
&& ((interpreterProxy->byteSizeOf(sockHandle)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- serverSocket = null;
- goto l2;
- }
- socketIndex1 = ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle)));
- serverSocket = socketIndex1;
-l2: /* end socketValueOf: */;
+ serverSocket = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle))));
if (!(interpreterProxy->failed())) {
socketOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), socketRecordSize());
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
- l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketAcceptFromRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, serverSocket, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema);
}
if (interpreterProxy->failed()) {
@@ -529,6 +844,95 @@
}
EXPORT(sqInt)
+primitiveSocketAddressGetPort(void)
+{
+ sqInt addr;
+ char *addrBase;
+ sqInt addrSize;
+ sqInt port;
+ sqInt _return_value;
+
+ addr = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ addrSize = interpreterProxy->byteSizeOf(addr);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(addr)));
+ if (!(interpreterProxy->failed())) {
+ port = sqSocketAddressSizeGetPort(addrBase, addrSize);
+ if (!(interpreterProxy->failed())) {
+ _return_value = interpreterProxy->integerObjectOf(port);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(1, _return_value);
+ return null;
+ }
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveSocketAddressSetPort(void)
+{
+ sqInt addr;
+ char *addrBase;
+ sqInt addrSize;
+ sqInt portNumber;
+
+ portNumber = interpreterProxy->stackIntegerValue(0);
+ addr = interpreterProxy->stackValue(1);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ addrSize = interpreterProxy->byteSizeOf(addr);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(addr)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketAddressSizeSetPort(addrBase, addrSize, portNumber);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(1);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveSocketBindTo(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ SocketPtr s;
+ sqInt socket;
+ sqInt socketAddress;
+
+ socket = interpreterProxy->stackValue(1);
+ socketAddress = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketBindToAddressSize(s, addrBase, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
primitiveSocketBindToPort(void)
{
sqInt addr;
@@ -536,7 +940,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt sz;
socket = interpreterProxy->stackValue(2);
@@ -557,13 +960,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l2;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l2: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketBindToPort(s, addr, port);
}
@@ -579,7 +978,6 @@
{
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(0);
if (interpreterProxy->failed()) {
@@ -588,13 +986,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketCloseConnection(s);
}
@@ -610,7 +1004,6 @@
{
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt status;
sqInt _return_value;
@@ -621,13 +1014,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
status = sqSocketConnectionStatus(s);
}
@@ -640,6 +1029,38 @@
}
EXPORT(sqInt)
+primitiveSocketConnectTo(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ SocketPtr s;
+ sqInt socket;
+ sqInt socketAddress;
+
+ socket = interpreterProxy->stackValue(1);
+ socketAddress = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketConnectToAddressSize(s, addrBase, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
primitiveSocketConnectToPort(void)
{
sqInt addr;
@@ -648,7 +1069,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt sz;
socket = interpreterProxy->stackValue(2);
@@ -668,7 +1088,7 @@
l1: /* end netAddressToInt: */;
if (sCCTPfn != 0) {
okToConnect = ((int (*) (int, int)) sCCTPfn)(addr, port);
- if (!(okToConnect)) {
+ if (!okToConnect) {
interpreterProxy->primitiveFail();
return null;
}
@@ -676,13 +1096,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l2;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l2: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketConnectToPort(s, addr, port);
}
@@ -702,7 +1118,6 @@
SocketPtr s;
sqInt semaIndex;
sqInt sendBufSize;
- void *socketIndex;
sqInt socketOop;
sqInt socketType;
@@ -716,7 +1131,7 @@
}
if (sCCSOTfn != 0) {
okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, socketType);
- if (!(okToCreate)) {
+ if (!okToCreate) {
interpreterProxy->primitiveFail();
return null;
}
@@ -725,13 +1140,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex);
if (interpreterProxy->failed()) {
return null;
@@ -751,7 +1162,6 @@
SocketPtr s;
sqInt semaIndex;
sqInt sendBufSize;
- void *socketIndex;
sqInt socketOop;
sqInt socketType;
@@ -767,7 +1177,7 @@
}
if (sCCSOTfn != 0) {
okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, socketType);
- if (!(okToCreate)) {
+ if (!okToCreate) {
interpreterProxy->primitiveFail();
return null;
}
@@ -776,13 +1186,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema);
if (interpreterProxy->failed()) {
return null;
@@ -803,7 +1209,6 @@
SocketPtr s;
sqInt semaIndex;
sqInt sendBufSize;
- void *socketIndex;
sqInt socketOop;
netType = interpreterProxy->stackIntegerValue(6);
@@ -818,7 +1223,7 @@
}
if (sCCSOTfn != 0) {
okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, protoType);
- if (!(okToCreate)) {
+ if (!okToCreate) {
interpreterProxy->primitiveFail();
return null;
}
@@ -827,13 +1232,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
sqSocketCreateRawProtoTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, protoType, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema);
if (interpreterProxy->failed()) {
return null;
@@ -847,7 +1248,6 @@
{
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(0);
if (interpreterProxy->failed()) {
@@ -856,13 +1256,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
sqSocketDestroy(s);
}
@@ -879,7 +1275,6 @@
sqInt err;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -889,13 +1284,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (!(interpreterProxy->failed())) {
err = sqSocketError(s);
}
@@ -918,7 +1309,6 @@
sqInt returnedValue;
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(1);
optionName = interpreterProxy->stackValue(0);
@@ -928,13 +1318,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isBytes(optionName));
optionNameStart = ((char *) (interpreterProxy->firstIndexableField(optionName)));
optionNameSize = interpreterProxy->slotSizeOf(optionName);
@@ -968,7 +1354,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(1);
port = interpreterProxy->stackIntegerValue(0);
@@ -978,21 +1363,19 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (sCCLOPfn != 0) {
okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port);
- if (!(okToListen)) {
+ if (!okToListen) {
interpreterProxy->primitiveFail();
return null;
}
}
- sqSocketListenOnPort(s, port);
+ if (!(interpreterProxy->failed())) {
+ sqSocketListenOnPort(s, port);
+ }
if (interpreterProxy->failed()) {
return null;
}
@@ -1013,7 +1396,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(2);
port = interpreterProxy->stackIntegerValue(1);
@@ -1024,16 +1406,12 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (sCCLOPfn != 0) {
okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port);
- if (!(okToListen)) {
+ if (!okToListen) {
interpreterProxy->primitiveFail();
return null;
}
@@ -1062,7 +1440,6 @@
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt sz;
socket = interpreterProxy->stackValue(3);
@@ -1076,16 +1453,12 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l2;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l2: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
if (sCCLOPfn != 0) {
okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port);
- if (!(okToListen)) {
+ if (!okToListen) {
interpreterProxy->primitiveFail();
return null;
}
@@ -1106,7 +1479,35 @@
return null;
}
+EXPORT(sqInt)
+primitiveSocketListenWithBacklog(void)
+{
+ sqInt backlogSize;
+ SocketPtr s;
+ sqInt socket;
+ socket = interpreterProxy->stackValue(1);
+ backlogSize = interpreterProxy->stackIntegerValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ if (!(interpreterProxy->failed())) {
+ sqSocketListenBacklog(s, backlogSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+
/* Backward compatibility */
EXPORT(sqInt)
@@ -1126,7 +1527,6 @@
sqInt addr;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1136,13 +1536,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
addr = sqSocketLocalAddress(s);
_return_value = intToNetAddress(addr);
if (interpreterProxy->failed()) {
@@ -1153,12 +1549,76 @@
}
EXPORT(sqInt)
+primitiveSocketLocalAddressResult(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ SocketPtr s;
+ sqInt socket;
+ sqInt socketAddress;
+
+ socket = interpreterProxy->stackValue(1);
+ socketAddress = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketLocalAddressResultSize(s, addrBase, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveSocketLocalAddressSize(void)
+{
+ SocketPtr s;
+ sqInt size;
+ sqInt socket;
+ sqInt _return_value;
+
+ socket = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ size = sqSocketLocalAddressSize(s);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(2, _return_value);
+ return null;
+}
+
+EXPORT(sqInt)
primitiveSocketLocalPort(void)
{
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1168,13 +1628,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
port = sqSocketLocalPort(s);
_return_value = interpreterProxy->integerObjectOf(port);
if (interpreterProxy->failed()) {
@@ -1190,7 +1646,6 @@
sqInt dataIsAvailable;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1200,13 +1655,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
dataIsAvailable = sqSocketReceiveDataAvailable(s);
_return_value = (dataIsAvailable) ? interpreterProxy->trueObject(): interpreterProxy->falseObject();
if (interpreterProxy->failed()) {
@@ -1227,7 +1678,6 @@
sqInt count;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt startIndex;
sqInt _return_value;
@@ -1241,13 +1691,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isWordsOrBytes(array));
if (interpreterProxy->isWords(array)) {
byteSize = 4;
@@ -1257,7 +1703,7 @@
}
interpreterProxy->success((startIndex >= 1)
&& ((count >= 0)
- && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array)))));
+ && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array)))));
if (!(interpreterProxy->failed())) {
/* Note: adjust bufStart for zero-origin indexing */
@@ -1289,7 +1735,6 @@
sqInt results;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt startIndex;
socket = interpreterProxy->stackValue(3);
@@ -1302,13 +1747,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isWordsOrBytes(array));
if (interpreterProxy->isWords(array)) {
byteSize = 4;
@@ -1318,7 +1759,7 @@
}
interpreterProxy->success((startIndex >= 1)
&& ((count >= 0)
- && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array)))));
+ && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array)))));
if (!(interpreterProxy->failed())) {
/* Note: adjust bufStart for zero-origin indexing */
@@ -1361,7 +1802,6 @@
sqInt addr;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1371,13 +1811,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
addr = sqSocketRemoteAddress(s);
_return_value = intToNetAddress(addr);
if (interpreterProxy->failed()) {
@@ -1388,12 +1824,76 @@
}
EXPORT(sqInt)
+primitiveSocketRemoteAddressResult(void)
+{
+ char *addrBase;
+ sqInt addrSize;
+ SocketPtr s;
+ sqInt socket;
+ sqInt socketAddress;
+
+ socket = interpreterProxy->stackValue(1);
+ socketAddress = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ addrSize = interpreterProxy->byteSizeOf(socketAddress);
+ addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress)));
+ if (!(interpreterProxy->failed())) {
+ sqSocketRemoteAddressResultSize(s, addrBase, addrSize);
+ }
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->pop(2);
+ return null;
+}
+
+EXPORT(sqInt)
+primitiveSocketRemoteAddressSize(void)
+{
+ SocketPtr s;
+ sqInt size;
+ sqInt socket;
+ sqInt _return_value;
+
+ socket = interpreterProxy->stackValue(0);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ /* begin socketValueOf: */
+ interpreterProxy->success((interpreterProxy->isBytes(socket))
+ && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ size = sqSocketRemoteAddressSize(s);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ _return_value = interpreterProxy->integerObjectOf(size);
+ if (interpreterProxy->failed()) {
+ return null;
+ }
+ interpreterProxy->popthenPush(2, _return_value);
+ return null;
+}
+
+EXPORT(sqInt)
primitiveSocketRemotePort(void)
{
sqInt port;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1403,13 +1903,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
port = sqSocketRemotePort(s);
_return_value = interpreterProxy->integerObjectOf(port);
if (interpreterProxy->failed()) {
@@ -1430,7 +1926,6 @@
sqInt count;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt startIndex;
sqInt _return_value;
@@ -1444,13 +1939,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isWordsOrBytes(array));
if (interpreterProxy->isWords(array)) {
byteSize = 4;
@@ -1460,7 +1951,7 @@
}
interpreterProxy->success((startIndex >= 1)
&& ((count >= 0)
- && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array)))));
+ && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array)))));
if (!(interpreterProxy->failed())) {
/* Note: adjust bufStart for zero-origin indexing */
@@ -1483,7 +1974,6 @@
sqInt done;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt _return_value;
socket = interpreterProxy->stackValue(0);
@@ -1493,13 +1983,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
done = sqSocketSendDone(s);
_return_value = (done) ? interpreterProxy->trueObject(): interpreterProxy->falseObject();
if (interpreterProxy->failed()) {
@@ -1523,7 +2009,6 @@
sqInt portNumber;
SocketPtr s;
sqInt socket;
- void *socketIndex;
sqInt startIndex;
sqInt sz;
sqInt _return_value;
@@ -1541,13 +2026,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l2;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l2: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isWordsOrBytes(array));
if (interpreterProxy->isWords(array)) {
byteSize = 4;
@@ -1557,7 +2038,7 @@
}
interpreterProxy->success((startIndex >= 1)
&& ((count >= 0)
- && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array)))));
+ && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array)))));
if (!(interpreterProxy->failed())) {
/* Note: adjust bufStart for zero-origin indexing */
@@ -1596,7 +2077,6 @@
sqInt returnedValue;
SocketPtr s;
sqInt socket;
- void *socketIndex;
socket = interpreterProxy->stackValue(2);
optionName = interpreterProxy->stackValue(1);
@@ -1607,13 +2087,9 @@
/* begin socketValueOf: */
interpreterProxy->success((interpreterProxy->isBytes(socket))
&& ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- s = null;
- goto l1;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket)));
- s = socketIndex;
-l1: /* end socketValueOf: */;
+ s = (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socket))));
interpreterProxy->success(interpreterProxy->isBytes(optionName));
optionNameStart = ((char *) (interpreterProxy->firstIndexableField(optionName)));
optionNameSize = interpreterProxy->slotSizeOf(optionName);
@@ -1677,15 +2153,11 @@
static SocketPtr
socketValueOf(sqInt socketOop)
{
- void *socketIndex;
-
interpreterProxy->success((interpreterProxy->isBytes(socketOop))
&& ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize())));
- if (interpreterProxy->failed()) {
- return null;
- }
- socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)));
- return socketIndex;
+ return (interpreterProxy->failed()
+ ? null
+ : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))));
}
static void
@@ -1707,6 +2179,20 @@
{"SocketPlugin", "primitiveResolverAbortLookup", (void*)primitiveResolverAbortLookup},
{"SocketPlugin", "primitiveResolverAddressLookupResult", (void*)primitiveResolverAddressLookupResult},
{"SocketPlugin", "primitiveResolverError", (void*)primitiveResolverError},
+ {"SocketPlugin", "primitiveResolverGetAddressInfo", (void*)primitiveResolverGetAddressInfo},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoFamily", (void*)primitiveResolverGetAddressInfoFamily},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoNext", (void*)primitiveResolverGetAddressInfoNext},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoProtocol", (void*)primitiveResolverGetAddressInfoProtocol},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoResult", (void*)primitiveResolverGetAddressInfoResult},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoSize", (void*)primitiveResolverGetAddressInfoSize},
+ {"SocketPlugin", "primitiveResolverGetAddressInfoType", (void*)primitiveResolverGetAddressInfoType},
+ {"SocketPlugin", "primitiveResolverGetNameInfo", (void*)primitiveResolverGetNameInfo},
+ {"SocketPlugin", "primitiveResolverGetNameInfoHostResult", (void*)primitiveResolverGetNameInfoHostResult},
+ {"SocketPlugin", "primitiveResolverGetNameInfoHostSize", (void*)primitiveResolverGetNameInfoHostSize},
+ {"SocketPlugin", "primitiveResolverGetNameInfoServiceResult", (void*)primitiveResolverGetNameInfoServiceResult},
+ {"SocketPlugin", "primitiveResolverGetNameInfoServiceSize", (void*)primitiveResolverGetNameInfoServiceSize},
+ {"SocketPlugin", "primitiveResolverHostNameResult", (void*)primitiveResolverHostNameResult},
+ {"SocketPlugin", "primitiveResolverHostNameSize", (void*)primitiveResolverHostNameSize},
{"SocketPlugin", "primitiveResolverLocalAddress", (void*)primitiveResolverLocalAddress},
{"SocketPlugin", "primitiveResolverNameLookupResult", (void*)primitiveResolverNameLookupResult},
{"SocketPlugin", "primitiveResolverStartAddressLookup", (void*)primitiveResolverStartAddressLookup},
@@ -1715,9 +2201,13 @@
{"SocketPlugin", "primitiveSocketAbortConnection", (void*)primitiveSocketAbortConnection},
{"SocketPlugin", "primitiveSocketAccept", (void*)primitiveSocketAccept},
{"SocketPlugin", "primitiveSocketAccept3Semaphores", (void*)primitiveSocketAccept3Semaphores},
+ {"SocketPlugin", "primitiveSocketAddressGetPort", (void*)primitiveSocketAddressGetPort},
+ {"SocketPlugin", "primitiveSocketAddressSetPort", (void*)primitiveSocketAddressSetPort},
+ {"SocketPlugin", "primitiveSocketBindTo", (void*)primitiveSocketBindTo},
{"SocketPlugin", "primitiveSocketBindToPort", (void*)primitiveSocketBindToPort},
{"SocketPlugin", "primitiveSocketCloseConnection", (void*)primitiveSocketCloseConnection},
{"SocketPlugin", "primitiveSocketConnectionStatus", (void*)primitiveSocketConnectionStatus},
+ {"SocketPlugin", "primitiveSocketConnectTo", (void*)primitiveSocketConnectTo},
{"SocketPlugin", "primitiveSocketConnectToPort", (void*)primitiveSocketConnectToPort},
{"SocketPlugin", "primitiveSocketCreate", (void*)primitiveSocketCreate},
{"SocketPlugin", "primitiveSocketCreate3Semaphores", (void*)primitiveSocketCreate3Semaphores},
@@ -1728,13 +2218,18 @@
{"SocketPlugin", "primitiveSocketListenOnPort", (void*)primitiveSocketListenOnPort},
{"SocketPlugin", "primitiveSocketListenOnPortBacklog", (void*)primitiveSocketListenOnPortBacklog},
{"SocketPlugin", "primitiveSocketListenOnPortBacklogInterface", (void*)primitiveSocketListenOnPortBacklogInterface},
+ {"SocketPlugin", "primitiveSocketListenWithBacklog", (void*)primitiveSocketListenWithBacklog},
{"SocketPlugin", "primitiveSocketListenWithOrWithoutBacklog", (void*)primitiveSocketListenWithOrWithoutBacklog},
{"SocketPlugin", "primitiveSocketLocalAddress", (void*)primitiveSocketLocalAddress},
+ {"SocketPlugin", "primitiveSocketLocalAddressResult", (void*)primitiveSocketLocalAddressResult},
+ {"SocketPlugin", "primitiveSocketLocalAddressSize", (void*)primitiveSocketLocalAddressSize},
{"SocketPlugin", "primitiveSocketLocalPort", (void*)primitiveSocketLocalPort},
{"SocketPlugin", "primitiveSocketReceiveDataAvailable", (void*)primitiveSocketReceiveDataAvailable},
{"SocketPlugin", "primitiveSocketReceiveDataBufCount", (void*)primitiveSocketReceiveDataBufCount},
{"SocketPlugin", "primitiveSocketReceiveUDPDataBufCount", (void*)primitiveSocketReceiveUDPDataBufCount},
{"SocketPlugin", "primitiveSocketRemoteAddress", (void*)primitiveSocketRemoteAddress},
+ {"SocketPlugin", "primitiveSocketRemoteAddressResult", (void*)primitiveSocketRemoteAddressResult},
+ {"SocketPlugin", "primitiveSocketRemoteAddressSize", (void*)primitiveSocketRemoteAddressSize},
{"SocketPlugin", "primitiveSocketRemotePort", (void*)primitiveSocketRemotePort},
{"SocketPlugin", "primitiveSocketSendDataBufCount", (void*)primitiveSocketSendDataBufCount},
{"SocketPlugin", "primitiveSocketSendDone", (void*)primitiveSocketSendDone},
Modified: branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
===================================================================
--- branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -1,9 +1,9 @@
/* Automatically generated by
- VMPluginCodeGenerator VMMaker.oscog-eem.154 uuid: 5cbb57c7-0a54-4b7e-848c-1f292759f1fa
+ VMPluginCodeGenerator VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 uuid: 90d36152-4f89-4764-b476-2cc44c195139
+ UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 uuid: 15acec73-e0e7-4cc0-a521-1c4204a4b5b7
*/
-static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 uuid: 90d36152-4f89-4764-b476-2cc44c195139 " __DATE__ ;
+static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 uuid: 15acec73-e0e7-4cc0-a521-1c4204a4b5b7 " __DATE__ ;
@@ -109,6 +109,7 @@
EXPORT(sqInt) primitiveChdir(void);
EXPORT(sqInt) primitiveCreatePipe(void);
EXPORT(sqInt) primitiveCreatePipeWithSessionIdentifier(void);
+EXPORT(sqInt) primitiveDup(sqInt fileDescriptor);
EXPORT(sqInt) primitiveDupTo(sqInt oldFileDescriptor, sqInt newFileDescriptor);
EXPORT(sqInt) primitiveEnvironmentAt(void);
EXPORT(sqInt) primitiveEnvironmentAtSymbol(void);
@@ -249,9 +250,9 @@
struct VirtualMachine* interpreterProxy;
static const char *moduleName =
#ifdef SQUEAK_BUILTIN_PLUGIN
- "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 (i)"
+ "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 (i)"
#else
- "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 (e)"
+ "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 (e)"
#endif
;
static void *originalSigHandlers[NSIG];
@@ -1292,11 +1293,11 @@
path = transientCStringFromString(interpreterProxy->stackObjectValue(0));
if (chdir(path)) {
interpreterProxy->pop(2);
- interpreterProxy->push(interpreterProxy->nilObject());
+ interpreterProxy->pushInteger(errno);
}
else {
interpreterProxy->pop(2);
- interpreterProxy->pushInteger(errno);
+ interpreterProxy->push(interpreterProxy->nilObject());
}
}
@@ -1420,6 +1421,24 @@
}
+/* Call dup() to duplicate a file descriptor using the next available
+ descriptor. Answer
+ the new file descriptor or -1 on failure.
+ */
+
+EXPORT(sqInt)
+primitiveDup(sqInt fileDescriptor)
+{
+ sqInt fd;
+ int result;
+
+ fd = interpreterProxy->stackIntegerValue(0);
+ result = dup(fd);
+ interpreterProxy->pop(2);
+ interpreterProxy->pushInteger(result);
+}
+
+
/* Call dup2() to duplicate a file descriptor. Answer the duplicated file
descriptor or -1 on failure. */
@@ -4440,6 +4459,7 @@
{"UnixOSProcessPlugin", "primitiveChdir", (void*)primitiveChdir},
{"UnixOSProcessPlugin", "primitiveCreatePipe", (void*)primitiveCreatePipe},
{"UnixOSProcessPlugin", "primitiveCreatePipeWithSessionIdentifier", (void*)primitiveCreatePipeWithSessionIdentifier},
+ {"UnixOSProcessPlugin", "primitiveDup", (void*)primitiveDup},
{"UnixOSProcessPlugin", "primitiveDupTo", (void*)primitiveDupTo},
{"UnixOSProcessPlugin", "primitiveEnvironmentAt", (void*)primitiveEnvironmentAt},
{"UnixOSProcessPlugin", "primitiveEnvironmentAtSymbol", (void*)primitiveEnvironmentAtSymbol},
Modified: branches/Cog/src/vm/cointerp.c
===================================================================
--- branches/Cog/src/vm/cointerp.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/src/vm/cointerp.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -1906,7 +1906,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.159]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.161]";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
@@ -21821,7 +21821,7 @@
/* This is a helper for primitiveObjectPointsTo so it *does not* check the
frameContext field because that is an implicit self-reference not present
- in the stale .
+ in the state .
*/
static sqInt
Modified: branches/Cog/src/vm/cointerpmt.c
===================================================================
--- branches/Cog/src/vm/cointerpmt.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/src/vm/cointerpmt.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- CoInterpreterMT VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CoInterpreterMT VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
*/
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -2005,7 +2005,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.159]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.161]";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
sqInt willNotThreadWarnCount;
@@ -22581,7 +22581,7 @@
/* This is a helper for primitiveObjectPointsTo so it *does not* check the
frameContext field because that is an implicit self-reference not present
- in the stale .
+ in the state .
*/
static sqInt
Modified: branches/Cog/src/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerp.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/src/vm/gcc3x-cointerp.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -1909,7 +1909,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.159]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.161]";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
@@ -21825,7 +21825,7 @@
/* This is a helper for primitiveObjectPointsTo so it *does not* check the
frameContext field because that is an implicit self-reference not present
- in the stale .
+ in the state .
*/
static sqInt
Modified: branches/Cog/src/vm/gcc3x-cointerpmt.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerpmt.c 2012-05-30 18:38:08 UTC (rev 2555)
+++ branches/Cog/src/vm/gcc3x-cointerpmt.c 2012-06-07 19:29:52 UTC (rev 2556)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
from
- CoInterpreterMT VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4
+ CoInterpreterMT VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc
*/
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -2008,7 +2008,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.159]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.161]";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
sqInt willNotThreadWarnCount;
@@ -22585,7 +22585,7 @@
/* This is a helper for primitiveObjectPointsTo so it *does not* check the
frameContext field because that is an implicit self-reference not present
- in the stale .
+ in the state .
*/
static sqInt
More information about the Vm-dev
mailing list