예제 #1
0
char supla_client_iterate(void *_suplaclient, int wait_usec) {
	TSuplaClientData *suplaclient = (TSuplaClientData *)_suplaclient;

	if ( supla_client_connected(_suplaclient) == 0 )
		return 0;

	if ( supla_client_registered(_suplaclient) == 0 ) {

		supla_client_set_registered(_suplaclient, -1);
		supla_client_register(suplaclient);

	} else if ( supla_client_registered(_suplaclient) == 1 ) {
		supla_client_ping(suplaclient);
	}


	if ( suplaclient->srpc != NULL
		 && srpc_iterate(suplaclient->srpc) == SUPLA_RESULT_FALSE ) {
		supla_client_disconnect(_suplaclient);
		return 0;
	}


	if ( supla_client_connected(_suplaclient) == 1
		 && suplaclient->eh != NULL ) {
		eh_wait(suplaclient->eh, wait_usec);
	}

	return 1;
}
예제 #2
0
char supla_client_connect(void *_suplaclient) {

	TSuplaClientData *suplaclient = (TSuplaClientData *)_suplaclient;
	supla_client_disconnect(_suplaclient);

	supla_client_clean(_suplaclient);

	if ( ssocket_client_connect(suplaclient->ssd, NULL) == 1 ) {


		suplaclient->eh = eh_init();
		TsrpcParams srpc_params;
		srpc_params_init(&srpc_params);
		srpc_params.user_params = _suplaclient;
		srpc_params.data_read = &supla_client_socket_read;
		srpc_params.data_write = &supla_client_socket_write;
		srpc_params.on_remote_call_received = &supla_client_on_remote_call_received;
		srpc_params.before_async_call = &supla_client_before_async_call;
		srpc_params.eh = suplaclient->eh;
		suplaclient->srpc = srpc_init(&srpc_params);

		eh_add_fd(suplaclient->eh, ssocket_get_fd(suplaclient->ssd));
		suplaclient->connected = 1;

		supla_client_set_registered(_suplaclient, 0);

		if ( suplaclient->cfg.cb_on_connected )
			suplaclient->cfg.cb_on_connected(_suplaclient, suplaclient->cfg.user_data);

		return 1;
	}

	return 0;
}
예제 #3
0
JNIEXPORT void JNICALL
Java_org_supla_android_lib_SuplaClient_scDisconnect(JNIEnv* env, jobject thiz, jlong _asc) {
    
    void *supla_client = supla_client_ptr(_asc);
    
    if ( supla_client )
        supla_client_disconnect(supla_client);
    
};
예제 #4
0
void supla_client_on_version_error(TSuplaClientData *scd, TSDC_SuplaVersionError *version_error) {

	supla_log(LOG_ERR, "Protocol version error. Server doesn't support this client. S:%d-%d/C:%d",
			version_error->server_version_min,
			version_error->server_version,
			SUPLA_PROTO_VERSION);


	if ( scd->cfg.cb_on_versionerror )
		scd->cfg.cb_on_versionerror(scd, scd->cfg.user_data, SUPLA_PROTO_VERSION, version_error->server_version_min, version_error->server_version);

	supla_client_disconnect(scd);
}
예제 #5
0
void supla_client_on_register_result(TSuplaClientData *scd, TSC_SuplaRegisterClientResult *register_client_result) {

	if ( register_client_result->result_code == SUPLA_RESULTCODE_TRUE ) {

		supla_client_set_registered(scd, 1);

		scd->server_activity_timeout = register_client_result->activity_timeout;
		scd->client_id = register_client_result->ClientID;


		supla_log(LOG_DEBUG, "Registered.");

		if ( scd->cfg.cb_on_registered )
			scd->cfg.cb_on_registered(scd, scd->cfg.user_data, register_client_result);

	} else {

		switch(register_client_result->result_code) {
		case SUPLA_RESULTCODE_BAD_CREDENTIALS:
			supla_log(LOG_ERR, "Bad credentials!");
			break;

		case SUPLA_RESULTCODE_TEMPORARILY_UNAVAILABLE:
			supla_log(LOG_NOTICE, "Temporarily unavailable!");
			break;

		case SUPLA_RESULTCODE_ACCESSID_DISABLED:
			supla_log(LOG_NOTICE, "Access Identifier is disabled!");
			break;

		case SUPLA_RESULTCODE_CLIENT_DISABLED:
			supla_log(LOG_NOTICE, "Client is disabled!");
			break;

		case SUPLA_RESULTCODE_CLIENT_LIMITEXCEEDED:
			supla_log(LOG_NOTICE, "Client limit exceeded!");
			break;

		case SUPLA_RESULTCODE_GUID_ERROR:
			supla_log(LOG_NOTICE, "Incorrect client GUID!");
			break;

		}

		if ( scd->cfg.cb_on_registererror )
			scd->cfg.cb_on_registererror(scd, scd->cfg.user_data, register_client_result->result_code);

		supla_client_disconnect(scd);
	}

}
예제 #6
0
void supla_client_free(void *_suplaclient) {

	if ( _suplaclient != NULL ) {


		supla_client_disconnect(_suplaclient);
		supla_client_clean(_suplaclient);

		TSuplaClientData *scd = (TSuplaClientData*)_suplaclient;


		if ( scd->cfg.host )
			free(scd->cfg.host);

		ssocket_free(scd->ssd);
		lck_free(scd->lck);


		free(_suplaclient);

	}

}