mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-21 09:51:50 +00:00
mdp_port_t
This commit is contained in:
parent
a95ef79139
commit
221fc4a4fc
@ -578,7 +578,7 @@ int app_dna_lookup(const struct cli_parsed *parsed, struct cli_context *context)
|
||||
|
||||
/* Bind to MDP socket and await confirmation */
|
||||
sid_t srcsid;
|
||||
int port=32768+(random()&32767);
|
||||
mdp_port_t port=32768+(random()&32767);
|
||||
if (overlay_mdp_getmyaddr(mdp_sockfd, 0, &srcsid)) {
|
||||
overlay_mdp_client_close(mdp_sockfd);
|
||||
return WHY("Could not get local address");
|
||||
@ -943,7 +943,7 @@ int app_mdp_ping(const struct cli_parsed *parsed, struct cli_context *context)
|
||||
return WHY("Cannot create MDP socket");
|
||||
|
||||
sid_t srcsid;
|
||||
int port=32768+(random()&32767);
|
||||
mdp_port_t port=32768+(random()&32767);
|
||||
if (overlay_mdp_getmyaddr(mdp_sockfd, 0, &srcsid)) {
|
||||
overlay_mdp_client_close(mdp_sockfd);
|
||||
return WHY("Could not get local address");
|
||||
@ -1080,7 +1080,7 @@ int app_trace(const struct cli_parsed *parsed, struct cli_context *context)
|
||||
|
||||
if ((mdp_sockfd = overlay_mdp_client_socket()) < 0)
|
||||
return WHY("Cannot create MDP socket");
|
||||
int port=32768+(random()&32767);
|
||||
mdp_port_t port=32768+(random()&32767);
|
||||
if (overlay_mdp_getmyaddr(mdp_sockfd, 0, &srcsid)) {
|
||||
overlay_mdp_client_close(mdp_sockfd);
|
||||
return WHY("Could not get local address");
|
||||
@ -2359,7 +2359,7 @@ int app_reverse_lookup(const struct cli_parsed *parsed, struct cli_context *cont
|
||||
if (cli_arg(parsed, "timeout", &delay, NULL, "3000") == -1)
|
||||
return -1;
|
||||
|
||||
int port=32768+(random()&0xffff);
|
||||
mdp_port_t port=32768+(random()&0xffff);
|
||||
|
||||
sid_t srcsid;
|
||||
sid_t dstsid;
|
||||
|
12
mdp_client.c
12
mdp_client.c
@ -144,7 +144,7 @@ int overlay_mdp_send(int mdp_sockfd, overlay_mdp_frame *mdp, int flags, int time
|
||||
}
|
||||
}
|
||||
|
||||
int port=0;
|
||||
mdp_port_t port=0;
|
||||
if ((mdp->packetTypeAndFlags&MDP_TYPE_MASK) == MDP_TX)
|
||||
port = mdp->out.src.port;
|
||||
|
||||
@ -229,7 +229,7 @@ int overlay_mdp_client_poll(int mdp_sockfd, time_ms_t timeout_ms)
|
||||
return poll(fds, 1, timeout_ms);
|
||||
}
|
||||
|
||||
int overlay_mdp_recv(int mdp_sockfd, overlay_mdp_frame *mdp, int port, int *ttl)
|
||||
int overlay_mdp_recv(int mdp_sockfd, overlay_mdp_frame *mdp, mdp_port_t port, int *ttl)
|
||||
{
|
||||
/* Construct name of socket to receive from. */
|
||||
struct sockaddr_un mdp_addr;
|
||||
@ -265,7 +265,7 @@ int overlay_mdp_recv(int mdp_sockfd, overlay_mdp_frame *mdp, int port, int *ttl)
|
||||
|
||||
// silently drop incoming packets for the wrong port number
|
||||
if (port>0 && port != mdp->in.dst.port){
|
||||
WARNF("Ignoring packet for port %d",mdp->in.dst.port);
|
||||
WARNF("Ignoring packet for port %"PRImdp_port_t,mdp->in.dst.port);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -280,7 +280,7 @@ int overlay_mdp_recv(int mdp_sockfd, overlay_mdp_frame *mdp, int port, int *ttl)
|
||||
}
|
||||
|
||||
// send a request to servald deamon to add a port binding
|
||||
int overlay_mdp_bind(int mdp_sockfd, const sid_t *localaddr, int port)
|
||||
int overlay_mdp_bind(int mdp_sockfd, const sid_t *localaddr, mdp_port_t port)
|
||||
{
|
||||
overlay_mdp_frame mdp;
|
||||
mdp.packetTypeAndFlags=MDP_BIND|MDP_FORCE;
|
||||
@ -289,10 +289,10 @@ int overlay_mdp_bind(int mdp_sockfd, const sid_t *localaddr, int port)
|
||||
int result=overlay_mdp_send(mdp_sockfd, &mdp,MDP_AWAITREPLY,5000);
|
||||
if (result) {
|
||||
if (mdp.packetTypeAndFlags==MDP_ERROR)
|
||||
WHYF("Could not bind to MDP port %d: error=%d, message='%s'",
|
||||
WHYF("Could not bind to MDP port %"PRImdp_port_t": error=%d, message='%s'",
|
||||
port,mdp.error.error,mdp.error.message);
|
||||
else
|
||||
WHYF("Could not bind to MDP port %d (no reason given)",port);
|
||||
WHYF("Could not bind to MDP port %"PRImdp_port_t" (no reason given)",port);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
struct mdp_sockaddr {
|
||||
sid_t sid;
|
||||
uint32_t port;
|
||||
mdp_port_t port;
|
||||
};
|
||||
|
||||
#define MDP_FLAG_NO_CRYPT (1<<0)
|
||||
@ -81,9 +81,9 @@ int overlay_mdp_client_socket(void);
|
||||
int overlay_mdp_client_close(int mdp_sockfd);
|
||||
int overlay_mdp_client_poll(int mdp_sockfd, time_ms_t timeout_ms);
|
||||
int overlay_mdp_getmyaddr(int mpd_sockfd, unsigned index, sid_t *sid);
|
||||
int overlay_mdp_bind(int mdp_sockfd, const sid_t *localaddr, int port) ;
|
||||
int overlay_mdp_recv(int mdp_sockfd, overlay_mdp_frame *mdp, int port, int *ttl);
|
||||
int overlay_mdp_send(int mdp_sockfd, overlay_mdp_frame *mdp,int flags,int timeout_ms);
|
||||
int overlay_mdp_bind(int mdp_sockfd, const sid_t *localaddr, mdp_port_t port) ;
|
||||
int overlay_mdp_recv(int mdp_sockfd, overlay_mdp_frame *mdp, mdp_port_t port, int *ttl);
|
||||
int overlay_mdp_send(int mdp_sockfd, overlay_mdp_frame *mdp, int flags, int timeout_ms);
|
||||
ssize_t overlay_mdp_relevant_bytes(overlay_mdp_frame *mdp);
|
||||
|
||||
#endif
|
||||
|
@ -120,7 +120,7 @@ int overlay_mdp_setup_sockets()
|
||||
|
||||
struct mdp_binding{
|
||||
struct subscriber *subscriber;
|
||||
int port;
|
||||
mdp_port_t port;
|
||||
char socket_name[MDP_MAX_SOCKET_NAME_LEN];
|
||||
int name_len;
|
||||
time_ms_t binding_time;
|
||||
@ -195,7 +195,7 @@ int overlay_mdp_process_bind_request(int sock, struct subscriber *subscriber, md
|
||||
if (config.debug.mdprequests)
|
||||
DEBUGF("Bind request %s:%"PRImdp_port_t, subscriber ? alloca_tohex_sid_t(subscriber->sid) : "NULL", port);
|
||||
|
||||
if (port<=0){
|
||||
if (port == 0){
|
||||
return WHYF("Port %d cannot be bound", port);
|
||||
}
|
||||
if (!mdp_bindings_initialised) {
|
||||
@ -260,13 +260,12 @@ int overlay_mdp_process_bind_request(int sock, struct subscriber *subscriber, md
|
||||
static int overlay_mdp_decode_header(struct overlay_buffer *buff, overlay_mdp_frame *mdp)
|
||||
{
|
||||
/* extract MDP port numbers */
|
||||
uint32_t port = ob_get_packed_ui32(buff);
|
||||
uint32_t same = port&1;
|
||||
mdp_port_t port = ob_get_packed_ui32(buff);
|
||||
int same = port&1;
|
||||
port >>=1;
|
||||
mdp->in.dst.port = port;
|
||||
if (!same){
|
||||
if (!same)
|
||||
port = ob_get_packed_ui32(buff);
|
||||
}
|
||||
mdp->in.src.port = port;
|
||||
|
||||
int len=ob_remaining(buff);
|
||||
@ -494,7 +493,7 @@ int overlay_mdp_dnalookup_reply(const sockaddr_mdp *dstaddr, const sid_t *resolv
|
||||
return overlay_mdp_dispatch(&mdpreply, 0 /* system generated */, NULL, 0);
|
||||
}
|
||||
|
||||
int overlay_mdp_check_binding(struct subscriber *subscriber, int port, int userGeneratedFrameP,
|
||||
int overlay_mdp_check_binding(struct subscriber *subscriber, mdp_port_t port, int userGeneratedFrameP,
|
||||
struct sockaddr_un *recvaddr, socklen_t recvaddrlen)
|
||||
{
|
||||
/* System generated frames can send anything they want */
|
||||
@ -519,22 +518,22 @@ int overlay_mdp_check_binding(struct subscriber *subscriber, int port, int userG
|
||||
}
|
||||
}
|
||||
|
||||
return WHYF("No such binding: recvaddr=%p %s addr=%s port=%u (0x%x) -- possible spoofing attack",
|
||||
return WHYF("No such binding: recvaddr=%p %s addr=%s port=%"PRImdp_port_t" -- possible spoofing attack",
|
||||
recvaddr,
|
||||
recvaddr ? alloca_toprint(-1, recvaddr->sun_path, recvaddrlen - sizeof(sa_family_t)) : "",
|
||||
alloca_tohex_sid_t(subscriber->sid),
|
||||
port, port
|
||||
port
|
||||
);
|
||||
}
|
||||
|
||||
int overlay_mdp_encode_ports(struct overlay_buffer *plaintext, int dst_port, int src_port){
|
||||
int port=dst_port << 1;
|
||||
if (dst_port==src_port)
|
||||
int overlay_mdp_encode_ports(struct overlay_buffer *plaintext, mdp_port_t dst_port, mdp_port_t src_port)
|
||||
{
|
||||
mdp_port_t port = dst_port << 1;
|
||||
if (dst_port == src_port)
|
||||
port |= 1;
|
||||
if (ob_append_packed_ui32(plaintext, port))
|
||||
return -1;
|
||||
|
||||
if (dst_port!=src_port){
|
||||
if (dst_port != src_port){
|
||||
if (ob_append_packed_ui32(plaintext, src_port))
|
||||
return -1;
|
||||
}
|
||||
@ -702,8 +701,7 @@ int overlay_mdp_dispatch(overlay_mdp_frame *mdp,int userGeneratedFrameP,
|
||||
}
|
||||
}
|
||||
|
||||
if (overlay_mdp_check_binding(source, mdp->out.src.port, userGeneratedFrameP,
|
||||
recvaddr, recvaddrlen)){
|
||||
if (overlay_mdp_check_binding(source, mdp->out.src.port, userGeneratedFrameP, recvaddr, recvaddrlen)){
|
||||
RETURN(overlay_mdp_reply_error
|
||||
(mdp_sock.poll.fd,
|
||||
(struct sockaddr_un *)recvaddr,
|
||||
|
5
serval.h
5
serval.h
@ -233,9 +233,6 @@ int rhizome_enabled();
|
||||
int rhizome_http_server_running();
|
||||
const char *rhizome_datastore_path();
|
||||
|
||||
extern struct in_addr client_addr;
|
||||
extern int client_port;
|
||||
|
||||
#define MAX_PEERS 1024
|
||||
extern int peer_count;
|
||||
extern struct in_addr peers[MAX_PEERS];
|
||||
@ -712,7 +709,7 @@ int overlay_mdp_reply(int sock,struct sockaddr_un *recvaddr, socklen_t recvaddrl
|
||||
overlay_mdp_frame *mdpreply);
|
||||
int overlay_mdp_dispatch(overlay_mdp_frame *mdp,int userGeneratedFrameP,
|
||||
struct sockaddr_un *recvaddr, socklen_t recvaddrlen);
|
||||
int overlay_mdp_encode_ports(struct overlay_buffer *plaintext, int dst_port, int src_port);
|
||||
int overlay_mdp_encode_ports(struct overlay_buffer *plaintext, mdp_port_t dst_port, mdp_port_t src_port);
|
||||
int overlay_mdp_dnalookup_reply(const sockaddr_mdp *dstaddr, const sid_t *resolved_sidp, const char *uri, const char *did, const char *name);
|
||||
|
||||
struct vomp_call_state;
|
||||
|
@ -21,6 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include "xprintf.h"
|
||||
@ -114,7 +115,7 @@ static const char * overlay_type(unsigned int type){
|
||||
}
|
||||
}
|
||||
|
||||
static const char * port_name(unsigned int port){
|
||||
static const char * port_name(uint32_t port){
|
||||
switch(port){
|
||||
case 1:
|
||||
return "KEY_MAP_REQUEST";
|
||||
@ -284,16 +285,16 @@ int isOverlayPacket(XPRINTF xpf, const unsigned char *packet, size_t *ofs, size_
|
||||
|
||||
if (!(payload_flags & 128)){
|
||||
size_t payload_offset=0;
|
||||
unsigned int dest_port_raw=get_packed_uint32(payload_start, &payload_offset);
|
||||
uint32_t dest_port_raw = get_packed_uint32(payload_start, &payload_offset);
|
||||
|
||||
int same = dest_port_raw&1;
|
||||
unsigned int dest_port = dest_port_raw >> 1;
|
||||
uint32_t dest_port = dest_port_raw >> 1;
|
||||
|
||||
xprintf(xpf, "%sDestination Port (0x%04x); %d %s\n", indent(8), dest_port_raw, dest_port, port_name(dest_port));
|
||||
if (same){
|
||||
xprintf(xpf, "%sSource Port; SAME\n", indent(8));
|
||||
}else{
|
||||
unsigned int src_port = get_packed_uint32(payload_start, &payload_offset);
|
||||
uint32_t src_port = get_packed_uint32(payload_start, &payload_offset);
|
||||
xprintf(xpf, "%sSource Port; %d %s\n", indent(8), src_port, port_name(src_port));
|
||||
}
|
||||
payload_start += payload_offset;
|
||||
|
Loading…
x
Reference in New Issue
Block a user