Ejemplo n.º 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;
}
Ejemplo n.º 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;
}
Ejemplo n.º 3
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);
	}

}
Ejemplo n.º 4
0
void supla_client_disconnect(void *_suplaclient) {

	TSuplaClientData *suplaclient = (TSuplaClientData *)_suplaclient;

	if ( supla_client_connected(_suplaclient) ) {


		suplaclient->connected = 0;

		supla_client_set_registered(_suplaclient, 0);

		ssocket_supla_socket__close(suplaclient->ssd);

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

}