bankd: use getnameinfo() to print client IP/port on connect
Change-Id: Ia721f993b4e4c0addf429fbd6179d7d379c0ccd0
This commit is contained in:
parent
fe3df992fe
commit
d6dfb8c045
|
@ -9,6 +9,9 @@
|
||||||
#include <winscard.h>
|
#include <winscard.h>
|
||||||
#include <pcsclite.h>
|
#include <pcsclite.h>
|
||||||
|
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
|
||||||
#include <osmocom/core/socket.h>
|
#include <osmocom/core/socket.h>
|
||||||
#include <osmocom/core/linuxlist.h>
|
#include <osmocom/core/linuxlist.h>
|
||||||
|
|
||||||
|
@ -288,6 +291,23 @@ static int worker_transceive_loop(struct bankd_worker *worker)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* obtain an ascii representation of the client IP/port */
|
||||||
|
static int worker_client_addrstr(char *out, unsigned int outlen, const struct bankd_worker *worker)
|
||||||
|
{
|
||||||
|
char hostbuf[32], portbuf[32];
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = getnameinfo((const struct sockaddr *)&worker->client.peer_addr,
|
||||||
|
worker->client.peer_addr_len, hostbuf, sizeof(hostbuf),
|
||||||
|
portbuf, sizeof(portbuf), NI_NUMERICHOST | NI_NUMERICSERV);
|
||||||
|
if (rc != 0) {
|
||||||
|
out[0] = '\0';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
snprintf(out, outlen, "%s:%s", hostbuf, portbuf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* worker thread main function */
|
/* worker thread main function */
|
||||||
static void *worker_main(void *arg)
|
static void *worker_main(void *arg)
|
||||||
{
|
{
|
||||||
|
@ -308,6 +328,8 @@ static void *worker_main(void *arg)
|
||||||
/* we continuously perform the same loop here, recycling the worker thread
|
/* we continuously perform the same loop here, recycling the worker thread
|
||||||
* once the client connection is gone or we have some trouble with the card/reader */
|
* once the client connection is gone or we have some trouble with the card/reader */
|
||||||
while (1) {
|
while (1) {
|
||||||
|
char buf[128];
|
||||||
|
|
||||||
worker->client.peer_addr_len = sizeof(worker->client.peer_addr);
|
worker->client.peer_addr_len = sizeof(worker->client.peer_addr);
|
||||||
|
|
||||||
worker_set_state(worker, BW_ST_ACCEPTING);
|
worker_set_state(worker, BW_ST_ACCEPTING);
|
||||||
|
@ -318,6 +340,8 @@ static void *worker_main(void *arg)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
worker->client.fd = rc;
|
worker->client.fd = rc;
|
||||||
|
worker_client_addrstr(buf, sizeof(buf), worker);
|
||||||
|
LOGW(worker, "Accepted connection from %s\n", buf);
|
||||||
worker_set_state(worker, BW_ST_CONN_WAIT_ID);
|
worker_set_state(worker, BW_ST_CONN_WAIT_ID);
|
||||||
|
|
||||||
/* run the main worker transceive loop body until there was some error */
|
/* run the main worker transceive loop body until there was some error */
|
||||||
|
@ -327,6 +351,8 @@ static void *worker_main(void *arg)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOGW(worker, "Error %d occurred: Cleaning up state\n", rc);
|
||||||
|
|
||||||
/* clean-up: reset to sane state */
|
/* clean-up: reset to sane state */
|
||||||
if (worker->reader.pcsc.hCard) {
|
if (worker->reader.pcsc.hCard) {
|
||||||
SCardDisconnect(worker->reader.pcsc.hCard, SCARD_UNPOWER_CARD);
|
SCardDisconnect(worker->reader.pcsc.hCard, SCARD_UNPOWER_CARD);
|
||||||
|
|
Loading…
Reference in New Issue