version 1.1.2.2, 2012/04/07 21:02:48
|
version 1.1.2.3, 2012/05/01 01:12:16
|
Line 46 SUCH DAMAGE.
|
Line 46 SUCH DAMAGE.
|
#include "global.h" |
#include "global.h" |
|
|
|
|
|
/* |
|
* mqtt_cli_Open() - Open client connection to MQTT broker |
|
* |
|
* @addr = brokers address |
|
* return: NULL error or !=NULL connected to broker |
|
*/ |
|
mqtt_cli_t * |
|
mqtt_cli_Open(struct sockaddr *addr) |
|
{ |
|
mqtt_cli_t *cli; |
|
|
|
if (!addr) |
|
return NULL; |
|
|
|
cli = malloc(sizeof(mqtt_cli_t)); |
|
if (!cli) { |
|
LOGERR; |
|
return NULL; |
|
} else |
|
memset(cli, 0, sizeof(mqtt_cli_t)); |
|
|
|
cli->sock = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP); |
|
if (cli->sock == -1) { |
|
LOGERR; |
|
free(cli); |
|
return NULL; |
|
} |
|
if (connect(cli->sock, addr, addr->sa_len) == -1) { |
|
LOGERR; |
|
close(cli->sock); |
|
free(cli); |
|
return NULL; |
|
} |
|
|
|
cli->buf = mqtt_msgAlloc(USHRT_MAX); |
|
if (!cli->buf) { |
|
close(cli->sock); |
|
free(cli); |
|
return NULL; |
|
} |
|
|
|
return cli; |
|
} |
|
|
|
/* |
|
* mqtt_cli_Close() - Close client connection |
|
* |
|
* @cli = connected client |
|
* return: -1 error or 0 disconnected client and freed all resources |
|
*/ |
|
int |
|
mqtt_cli_Close(mqtt_cli_t ** __restrict cli) |
|
{ |
|
int siz = 0; |
|
|
|
if (!cli || !*cli) |
|
return -1; |
|
|
|
/* send disconnect */ |
|
siz = mqtt_msgDISCONNECT((*cli)->buf); |
|
if (siz > -1) { |
|
siz = send((*cli)->sock, (*cli)->buf->msg_base, siz, MSG_NOSIGNAL); |
|
if (siz > -1) |
|
shutdown((*cli)->sock, SHUT_RDWR); |
|
} |
|
close((*cli)->sock); |
|
|
|
mqtt_msgFree(&(*cli)->buf, 42); |
|
|
|
free(*cli); |
|
*cli = NULL; |
|
return 0; |
|
} |