Move is_sid_broadcast() and is_sid_any() macros into serval.h

From overlay_mdp.c.  is_sid_broadcast() was defined as is_broadcast().

Also clean up the signature and implementation of is_all_matching().
This commit is contained in:
Andrew Bettison 2012-10-09 13:49:23 +10:30
parent 5a6a42f36d
commit 3433b0fbb5
3 changed files with 15 additions and 15 deletions

View File

@ -58,10 +58,10 @@ int is_xstring(const char *text, int len)
} }
/* Does this whole buffer contain the same value? */ /* Does this whole buffer contain the same value? */
int is_all_matching(unsigned char *ptr, int len, int value){ int is_all_matching(const unsigned char *ptr, size_t len, unsigned char value)
int i; {
for (i=0;i<len;i++) while (len--)
if (ptr[i]!=value) if (*ptr++ != value)
return 0; return 0;
return 1; return 1;
} }

View File

@ -36,12 +36,6 @@ struct sched_ent mdp_named={
.stats = &mdp_stats, .stats = &mdp_stats,
}; };
// is the SID entirely 0xFF?
#define is_broadcast(SID) is_all_matching(SID, SID_SIZE, 0xFF)
// is the SID entirely 0x00?
#define is_sid_any(SID) is_all_matching(SID, SID_SIZE, 0)
int overlay_mdp_setup_sockets() int overlay_mdp_setup_sockets()
{ {
struct sockaddr_un name; struct sockaddr_un name;
@ -425,7 +419,7 @@ int overlay_saw_mdp_frame(overlay_mdp_frame *mdp, time_ms_t now)
// TODO pass in dest subscriber as an argument, we should know it by now // TODO pass in dest subscriber as an argument, we should know it by now
struct subscriber *destination = NULL; struct subscriber *destination = NULL;
if (!is_broadcast(mdp->out.dst.sid)){ if (!is_sid_broadcast(mdp->out.dst.sid)){
destination = find_subscriber(mdp->out.dst.sid, SID_SIZE, 1); destination = find_subscriber(mdp->out.dst.sid, SID_SIZE, 1);
} }
@ -542,7 +536,7 @@ int overlay_saw_mdp_frame(overlay_mdp_frame *mdp, time_ms_t now)
} }
/* If the packet was sent to broadcast, then replace broadcast address /* If the packet was sent to broadcast, then replace broadcast address
with our local address. For now just responds with first local address */ with our local address. For now just responds with first local address */
if (is_broadcast(mdp->out.src.sid)) if (is_sid_broadcast(mdp->out.src.sid))
{ {
if (my_subscriber) if (my_subscriber)
bcopy(my_subscriber->sid, bcopy(my_subscriber->sid,
@ -661,7 +655,7 @@ int overlay_mdp_dispatch(overlay_mdp_frame *mdp,int userGeneratedFrameP,
/* set source to ourselves */ /* set source to ourselves */
frame->source = my_subscriber; frame->source = my_subscriber;
bcopy(frame->source->sid, mdp->out.src.sid, SID_SIZE); bcopy(frame->source->sid, mdp->out.src.sid, SID_SIZE);
}else if (is_broadcast(mdp->out.src.sid)){ }else if (is_sid_broadcast(mdp->out.src.sid)){
/* This is rather naughty if it happens, since broadcasting a /* This is rather naughty if it happens, since broadcasting a
response can lead to all manner of nasty things. response can lead to all manner of nasty things.
Picture a packet with broadcast as the source address, sent Picture a packet with broadcast as the source address, sent
@ -700,7 +694,7 @@ int overlay_mdp_dispatch(overlay_mdp_frame *mdp,int userGeneratedFrameP,
" you can send packets")); " you can send packets"));
} }
if (is_broadcast(mdp->out.dst.sid)){ if (is_sid_broadcast(mdp->out.dst.sid)){
/* broadcast packets cannot be encrypted, so complain if MDP_NOCRYPT /* broadcast packets cannot be encrypted, so complain if MDP_NOCRYPT
flag is not set. Also, MDP_NOSIGN must also be applied, until flag is not set. Also, MDP_NOSIGN must also be applied, until
NaCl cryptobox keys can be used for signing. */ NaCl cryptobox keys can be used for signing. */

View File

@ -458,7 +458,13 @@ int fromhexstr(unsigned char *dstBinary, const char *srcHex, size_t bytes);
int hexvalue(char c); int hexvalue(char c);
char *str_toupper_inplace(char *s); char *str_toupper_inplace(char *s);
int is_all_matching(unsigned char *ptr, int len, int value); int is_all_matching(const unsigned char *ptr, size_t len, unsigned char value);
// is the SID entirely 0xFF?
#define is_sid_broadcast(SID) is_all_matching(SID, SID_SIZE, 0xFF)
// is the SID entirely 0x00?
#define is_sid_any(SID) is_all_matching(SID, SID_SIZE, 0)
int str_is_subscriber_id(const char *sid); int str_is_subscriber_id(const char *sid);
int strn_is_subscriber_id(const char *sid, size_t *lenp); int strn_is_subscriber_id(const char *sid, size_t *lenp);