mdp_port_t

This commit is contained in:
Andrew Bettison 2013-10-09 19:22:51 +10:30
parent a95ef79139
commit 221fc4a4fc
6 changed files with 34 additions and 38 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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,

View File

@ -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;

View File

@ -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;