Exemple #1
0
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);
}
Exemple #2
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
}
Exemple #3
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 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);
}
Exemple #4
0
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);
}
Exemple #5
0
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;
}
Exemple #6
0
IoObject *IoFile_isUserExecutable(IoFile *self, IoObject *locals, IoMessage *m)
{
	/*doc File isUserExecutable
	Returns true if the receiver is user group executable, false otherwise.
	*/
	
#ifdef ON_WINDOWS
	return IOFALSE(self);
#else
	mode_t mode = IoFile_statPointer(self, locals, m)->st_mode;
	mode_t check = S_IXUSR;
	return IOBOOL(self, mode & check);
#endif
}
Exemple #7
0
IoObject* IoMySQL_connect(IoObject* self, IoObject* locals, IoMessage* m) {
	IoObject *host = NULL, *user = NULL, *password = NULL, *database = NULL, *port = NULL, *socket = NULL, *ssl = NULL;

	/*#io
	docSlot("connect(host, user, password, database, port, unixSocket, useSSL)",
		   "Connect to a MySQL database.")
	*/

	switch(IoMessage_argCount(m)) {
		case 7: ssl = IoMessage_locals_quickValueArgAt_(m, locals, 6);
		case 6: socket = IoMessage_locals_quickValueArgAt_(m, locals, 5);
		case 5: port = IoMessage_locals_quickValueArgAt_(m, locals, 4);
		case 4: database = IoMessage_locals_quickValueArgAt_(m, locals, 3);
		case 3: password = IoMessage_locals_quickValueArgAt_(m, locals, 2);
		case 2: user = IoMessage_locals_quickValueArgAt_(m, locals, 1);
		case 1: host = IoMessage_locals_quickValueArgAt_(m, locals, 0);
	}

	if(DATA(self)->connected)
		mysql_close(&DATA(self)->connection);

	if(mysql_real_connect(
		&DATA(self)->connection,
		host && ISSEQ(host) ? IoSeq_asCString(host) : NULL,
		user && ISSEQ(user) ? IoSeq_asCString(user) : NULL,
		password && ISSEQ(password) ? IoSeq_asCString(password) : NULL,
		database && ISSEQ(database) ? IoSeq_asCString(database) : NULL,
		port && ISNUMBER(port) ? (unsigned) IoNumber_asInt(port) : 0,
		socket && ISSEQ(socket) ? IoSeq_asCString(socket) : NULL,
		ssl && ISFALSE(ssl) ? 0 : CLIENT_SSL
	)) {
		DATA(self)->connected = 1;

		IoObject_setSlot_to_(self, IOSYMBOL("host"), host ? host : IONIL(self));
		IoObject_setSlot_to_(self, IOSYMBOL("user"), user ? user : IONIL(self));
		IoObject_setSlot_to_(self, IOSYMBOL("password"), password ? password : IONIL(self));
		IoObject_setSlot_to_(self, IOSYMBOL("database"), database ? database : IONIL(self));
		IoObject_setSlot_to_(self, IOSYMBOL("port"), port ? port : IONIL(self));
		IoObject_setSlot_to_(self, IOSYMBOL("socket"), socket ? socket : IONIL(self));
		IoObject_setSlot_to_(self, IOSYMBOL("usingSSL"), ssl ? IOBOOL(self, ISTRUE(ssl)) : IOFALSE(self));
	}
	else
		IoState_error_(IOSTATE, m, "connection error(%d): %s", mysql_errno(&DATA(self)->connection), mysql_error(&DATA(self)->connection));

	return self;
}
Exemple #8
0
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);
}
Exemple #9
0
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;
}