コード例 #1
0
IO_METHOD(IoDirectory, exists)
{
    /*doc Directory exists(optionalPath)
    Returns true if the Directory path exists, and false otherwise.
    If optionalPath string is provided, it tests the existence of that path instead.
    */

    IoSymbol *path = DATA(self)->path;
    DIR *dirp;

    if (IoMessage_argCount(m) > 0)
    {
        path = IoMessage_locals_symbolArgAt_(m, locals, 0);
    }

#if !defined(_WIN32) || defined(__CYGWIN__)
    dirp = opendir(CSTRING(path));

    if (!dirp)
    {
        return IOFALSE(self);
    }

    (void)closedir(dirp);
    return IOTRUE(self);
#else
    {
        DWORD d = GetFileAttributes(CSTRING(path));
        return (d != INVALID_FILE_ATTRIBUTES) && (d & FILE_ATTRIBUTE_DIRECTORY) ? IOTRUE(self) : IOFALSE(self);
    }
#endif
}
コード例 #2
0
ファイル: IoDirectory.c プロジェクト: Akiyah/io
IO_METHOD(IoDirectory, exists)
{
	/*doc Directory exists(optionalPath)
	Returns true if the Directory path exists, and false otherwise.
	If optionalPath string is provided, it tests the existance of that path instead. 
	*/

	IoSymbol *path = DATA(self)->path;
	DIR *dirp;

	if (IoMessage_argCount(m) > 0)
	{
		path = IoMessage_locals_symbolArgAt_(m, locals, 0);
	}

	dirp = opendir(CSTRING(path));

	if (!dirp)
	{
		return IOFALSE(self);
	}

	(void)closedir(dirp);
	return IOTRUE(self);
}
コード例 #3
0
ファイル: IoAppleSensors.c プロジェクト: Alessandroo/io
IoObject *IoAppleSensors_smsVector(IoAppleSensors *self, IoObject *locals, IoMessage *m)
{
	/*doc AppleSensors smsVector(aVector)
		Sets aVector to the current x, y and z accelerometer values. 
		Returns true on success and false on failure.
	*/
	IoSeq *vector = IoMessage_locals_seqArgAt_(m, locals, 0);
	float *f = IoSeq_floatPointerOfLength_(vector, 3);
	int err;

	if (smsType == -1)
	{
		smsType = detect_sms();
	}

	int v[3] = {0, 0, 0};

	err = read_sms(smsType, &v[0], &v[1], &v[3]);
	
	f[0] = v[0];
	f[1] = v[1];
	f[2] = v[2];

	return err ? IOTRUE(self) : IOFALSE(self);
}
コード例 #4
0
ファイル: IoAsyncRequest.c プロジェクト: Akiyah/io
IoObject *IoAsyncRequest_isDone(IoAsyncRequest *self, IoObject *locals, IoMessage *m)
{
	/*doc AsyncRequest isDone
	Returns true if the request is done, false otherwise. 
	*/
	int r = aio_error(IOCB(self));
	return (r == 0 || r != EINPROGRESS) ? IOTRUE(self) : IOFALSE(self);
}
コード例 #5
0
ファイル: IoSecureClient.c プロジェクト: ADTSH/io
IoSecureClient *IoSecureClient_proto(void *state)
{
	initSSL();
	
	IoObject *self = IoObject_new(state);
	
	IoObject_tag_(self, IoSecureClient_newTag(state));

	SSL_CTX *ctx = SSL_CTX_new(TLSv1_client_method());
	if(ctx == NULL)
	{
		ERR_print_errors_fp(stderr);
	}
	IoObject_setDataPointer_(self, ctx);
	SSL_CTX_set_default_passwd_cb(ctx, IoSecureSockets_Password_Callback);
	SSL_CTX_set_default_passwd_cb_userdata(ctx, self);
	SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, IoSecureSockets_Verify_Callback);
	
			#ifdef DTLS_IMPLEMENTED
		IoObject_setSlot_to_(self, IOSYMBOL("supportsDTLS"), IOTRUE(self));
			#else
		IoObject_setSlot_to_(self, IOSYMBOL("supportsDTLS"), IOFALSE(self));
			#endif
	
	IoState_registerProtoWithFunc_((IoState *)state, self, IoSecureClient_proto);
	
	{
		IoMethodTable methodTable[] = {
		{"setKeyFile", IoSecureClient_setKeyFile},
		//doc SecureClient setKeyFile(aPath) Sets the key file. Returns self.
		
		{"setCertFile", IoSecureClient_setCertFile},
		//doc SecureClient setCertFile(aPath) Sets the Certificate file. Returns self.
		
		{"setCAFile", IoSecureClient_setCAFile},
		//doc SecureClient setCAFile(aPath) Sets the CA file. Returns self.
		
		{"setCRLFile", IoSecureClient_setCRLFile},
		//doc SecureClient setCRLFile(aPath) Sets the CRL file. Returns self.
		
		{"useTLS", IoSecureClient_useTLS},
		//doc SecureClient useTLS Returns useTLS value.
		
		{"useDTLS", IoSecureClient_useDTLS},
		//doc SecureClient useDTLS Returns useDTLS value.
		
		{"connectionToServer", IoSecureClient_connectionToServer},
		//doc SecureClient connectionToServer Returns connectionToServer.
		{NULL, NULL}
		};
		IoObject_addMethodTable_(self, methodTable);
	}
	
	return self;
}
コード例 #6
0
ファイル: IoSecureServer.c プロジェクト: ADTSH/io
IoSecureServer *IoSecureServer_setRequiresClientCertificate(IoSecureServer *self, IoObject *locals, IoMessage *msg)
{
	SSL_CTX *ctx = OCTX(self);
	if(IoMessage_locals_valueArgAt_(msg, locals, 0) == IOTRUE(self))
	{
		SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, IoSecureSockets_Verify_Callback);
	}
	else
	{
		SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, IoSecureSockets_Verify_Callback);
	}
	return self;
}
コード例 #7
0
ファイル: IoMessage_parser.c プロジェクト: eklitzke/io
void IoMessage_ifPossibleCacheToken_(IoMessage *self, IoToken *p)
{
	IoSymbol *method = DATA(self)->name;
	IoObject *r = NULL;

	switch ((int)IoToken_type(p))
	{
		case TRIQUOTE_TOKEN:
			r =  IoSeq_rawAsUntriquotedSymbol(method);
			break;

		case MONOQUOTE_TOKEN:
			r =  IoSeq_rawAsUnescapedSymbol(IoSeq_rawAsUnquotedSymbol(method));
			break;

		case NUMBER_TOKEN:
			r =  IONUMBER(IoSeq_asDouble(method));
			break;

		case HEXNUMBER_TOKEN:
			r =  IONUMBER(IoSeq_rawAsDoubleFromHex(method));
			break;

		default:
			if (IoSeq_rawEqualsCString_(method, "nil"))
			{
				r = IONIL(self);
			}
			else if (IoSeq_rawEqualsCString_(method, "true"))
			{
				r = IOTRUE(self);
			}
			else if (IoSeq_rawEqualsCString_(method, "false"))
			{
				r = IOFALSE(self);
			}
	}

	IoMessage_cachedResult_(self, r);
}
コード例 #8
0
ファイル: IoSecureServer.c プロジェクト: ADTSH/io
IoSecureServer *IoSecureServer_proto(void *state)
{
	initSSL();
	
	IoObject *self = IoObject_new(state);
	
	IoObject_tag_(self, IoSecureServer_newTag(state));
	
	IoObject_setDataPointer_(self, (SecureServerData *)calloc(1, sizeof(SecureServerData)));
	SSL_CTX *ctx = SSL_CTX_new(TLSv1_server_method());
	DATA(self)->ssl_ctx = ctx;
	SSL_CTX_set_default_passwd_cb(ctx, IoSecureSockets_Password_Callback);
	SSL_CTX_set_default_passwd_cb_userdata(ctx, self);
	SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, IoSecureSockets_Verify_Callback);
	
	#ifdef DTLS_IMPLEMENTED
	IoObject_setSlot_to_(self, IOSYMBOL("supportsDTLS"), IOTRUE(self));
	#else
	IoObject_setSlot_to_(self, IOSYMBOL("supportsDTLS"), IOFALSE(self));
	#endif
	//doc SecureServer supportsDTLS Returns true if server supports DTLS, false otherwise.

	IoState_registerProtoWithFunc_((IoState *)state, self, IoSecureServer_proto);
	
	{
		IoMethodTable methodTable[] = {
		{"setKeyFile", IoSecureServer_setKeyFile},
		//doc SecureServer setKeyFile(path) Sets the key file. Returns self.
		
		{"setCertFile", IoSecureServer_setCertFile},
		//doc SecureServer setCertFile(path) Sets the certificate file. Returns self.
		
		{"setCAFile", IoSecureServer_setCAFile},
		//doc SecureServer setCAFile(path) Sets the CA file. Returns self.
		
		{"setCRLFile", IoSecureServer_setCRLFile},
		//doc SecureServer setCRLFile(path) Sets the CRL file. Returns self.
		
		{"useTLS", IoSecureServer_useTLS},
		//doc SecureServer useTLS Returns useTLS value.

		{"useDTLS", IoSecureServer_useDTLS},
		//doc SecureServer useDTLS Returns useDTLS value.

		{"setRequiresClientCertificate", IoSecureServer_setRequiresClientCertificate},
		//doc SecureServer setRequiresClientCertificate(aBool) Sets the requires client certificate attribute. Returns self.
		
		{"tlsWrap", IoSecureServer_tlsWrap},
		//doc SecureServer tlsWrap Returns tlsWrap value.
		
		#ifdef DTLS_IMPLEMENTED
		{"dtlsWrap", IoSecureServer_dtlsWrap},
		//doc SecureServer dtlsWrap Returns dtlsWrap value.
		
		{"udpRecvIP", IoSecureServer_udpRecvIP},
		//doc SecureServer udpRecvIP Returns udpRecvIP value.
		
		{"dispatchUdp", IoSecureServer_dispatchUDP},
		//doc SecureServer dispatchUdp Returns dispatchUdp value.
		
		#endif
		{NULL, NULL}
		};
		IoObject_addMethodTable_(self, methodTable);
	}
	
	return self;
}
コード例 #9
0
ファイル: IoEditLine.c プロジェクト: cdcarter/io
IoObject *IoEditLine_hasEditLib(IoEditLine *self, IoObject *locals, IoMessage *m)
{
	return IOTRUE(self);
}