mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	IRC_NJOIN(): Code cleanup
No functional changes.
This commit is contained in:
		| @@ -245,66 +245,87 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req ) | |||||||
| 	CHANNEL *chan; | 	CHANNEL *chan; | ||||||
| 	CLIENT *c; | 	CLIENT *c; | ||||||
|  |  | ||||||
| 	assert( Client != NULL ); | 	assert(Client != NULL); | ||||||
| 	assert( Req != NULL ); | 	assert(Req != NULL); | ||||||
|  |  | ||||||
| 	strlcpy( nick_in, Req->argv[1], sizeof( nick_in )); | 	strlcpy(nick_in, Req->argv[1], sizeof(nick_in)); | ||||||
| 	strcpy( nick_out, "" ); | 	strcpy(nick_out, ""); | ||||||
|  |  | ||||||
| 	channame = Req->argv[0]; | 	channame = Req->argv[0]; | ||||||
| 	ptr = strtok( nick_in, "," ); |  | ||||||
| 	while( ptr ) | 	ptr = strtok(nick_in, ","); | ||||||
| 	{ | 	while (ptr) { | ||||||
| 		is_owner = is_chanadmin = is_op = is_halfop = is_voiced = false; | 		is_owner = is_chanadmin = is_op = is_halfop = is_voiced = false; | ||||||
|  |  | ||||||
| 		/* cut off prefixes */ | 		/* cut off prefixes */ | ||||||
| 		while(( *ptr == '~') || ( *ptr == '&' ) || ( *ptr == '@' ) || | 		while ((*ptr == '~') || (*ptr == '&') || (*ptr == '@') || | ||||||
| 			( *ptr == '%') || ( *ptr == '+' )) | 		       (*ptr == '%') || (*ptr == '+')) { | ||||||
| 		{ | 			if (*ptr == '~') | ||||||
| 			if( *ptr == '~' ) is_owner = true; | 				is_owner = true; | ||||||
| 			if( *ptr == '&' ) is_chanadmin = true; | 			if (*ptr == '&') | ||||||
| 			if( *ptr == '@' ) is_op = true; | 				is_chanadmin = true; | ||||||
| 			if( *ptr == '%' ) is_halfop = true; | 			if (*ptr == '@') | ||||||
| 			if( *ptr == '+' ) is_voiced = true; | 				is_op = true; | ||||||
|  | 			if (*ptr == '%') | ||||||
|  | 				is_halfop = true; | ||||||
|  | 			if (*ptr == '+') | ||||||
|  | 				is_voiced = true; | ||||||
| 			ptr++; | 			ptr++; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		c = Client_Search( ptr ); | 		c = Client_Search(ptr); | ||||||
| 		if( c ) | 		if (!c) { | ||||||
| 		{ | 			/* Client not found? */ | ||||||
| 			Channel_Join( c, channame ); | 			Log(LOG_ERR, | ||||||
| 			chan = Channel_Search( channame ); | 			    "Got NJOIN for unknown nick \"%s\" for channel \"%s\"!", | ||||||
| 			assert( chan != NULL ); | 			    ptr, channame); | ||||||
|  | 			goto skip_njoin; | ||||||
| 			if( is_owner ) Channel_UserModeAdd( chan, c, 'q' ); |  | ||||||
| 			if( is_chanadmin ) Channel_UserModeAdd( chan, c, 'a' ); |  | ||||||
| 			if( is_op ) Channel_UserModeAdd( chan, c, 'o' ); |  | ||||||
| 			if( is_halfop ) Channel_UserModeAdd( chan, c, 'h' ); |  | ||||||
| 			if( is_voiced ) Channel_UserModeAdd( chan, c, 'v' ); |  | ||||||
|  |  | ||||||
| 			/* announce to channel... */ |  | ||||||
| 			IRC_WriteStrChannelPrefix( Client, chan, c, false, "JOIN :%s", channame ); |  | ||||||
|  |  | ||||||
| 			/* set Channel-User-Modes */ |  | ||||||
| 			strlcpy( modes, Channel_UserModes( chan, c ), sizeof( modes )); |  | ||||||
| 			if( modes[0] ) |  | ||||||
| 			{ |  | ||||||
| 				/* send modes to channel */ |  | ||||||
| 				IRC_WriteStrChannelPrefix( Client, chan, Client, false, "MODE %s +%s %s", channame, modes, Client_ID( c )); |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			if( nick_out[0] != '\0' ) strlcat( nick_out, ",", sizeof( nick_out )); |  | ||||||
| 			if( is_owner ) strlcat( nick_out, "~", sizeof( nick_out )); |  | ||||||
| 			if( is_chanadmin ) strlcat( nick_out, "&", sizeof( nick_out )); |  | ||||||
| 			if( is_op ) strlcat( nick_out, "@", sizeof( nick_out )); |  | ||||||
| 			if( is_halfop ) strlcat( nick_out, "%", sizeof( nick_out )); |  | ||||||
| 			if( is_voiced ) strlcat( nick_out, "+", sizeof( nick_out )); |  | ||||||
| 			strlcat( nick_out, ptr, sizeof( nick_out )); |  | ||||||
| 		} | 		} | ||||||
| 		else Log( LOG_ERR, "Got NJOIN for unknown nick \"%s\" for channel \"%s\"!", ptr, channame ); |  | ||||||
|  |  | ||||||
| 		/* search for next Nick */ | 		Channel_Join(c, channame); | ||||||
| 		ptr = strtok( NULL, "," ); | 		chan = Channel_Search(channame); | ||||||
|  | 		assert(chan != NULL); | ||||||
|  |  | ||||||
|  | 		if (is_owner) | ||||||
|  | 			Channel_UserModeAdd(chan, c, 'q'); | ||||||
|  | 		if (is_chanadmin) | ||||||
|  | 			Channel_UserModeAdd(chan, c, 'a'); | ||||||
|  | 		if (is_op) | ||||||
|  | 			Channel_UserModeAdd(chan, c, 'o'); | ||||||
|  | 		if (is_halfop) | ||||||
|  | 			Channel_UserModeAdd(chan, c, 'h'); | ||||||
|  | 		if (is_voiced) | ||||||
|  | 			Channel_UserModeAdd(chan, c, 'v'); | ||||||
|  |  | ||||||
|  | 		/* Announce client to the channel */ | ||||||
|  | 		IRC_WriteStrChannelPrefix(Client, chan, c, false, | ||||||
|  | 					  "JOIN :%s", channame); | ||||||
|  |  | ||||||
|  | 		/* Announce "channel user modes" to the channel, if any */ | ||||||
|  | 		strlcpy(modes, Channel_UserModes(chan, c), sizeof(modes)); | ||||||
|  | 		if (modes[0]) | ||||||
|  | 			IRC_WriteStrChannelPrefix(Client, chan, Client, false, | ||||||
|  | 						  "MODE %s +%s %s", channame, | ||||||
|  | 						  modes, Client_ID(c)); | ||||||
|  |  | ||||||
|  | 		/* Build nick list for forwarding command */ | ||||||
|  | 		if (nick_out[0] != '\0') | ||||||
|  | 			strlcat(nick_out, ",", sizeof(nick_out)); | ||||||
|  | 		if (is_owner) | ||||||
|  | 			strlcat(nick_out, "~", sizeof(nick_out)); | ||||||
|  | 		if (is_chanadmin) | ||||||
|  | 			strlcat(nick_out, "&", sizeof(nick_out)); | ||||||
|  | 		if (is_op) | ||||||
|  | 			strlcat(nick_out, "@", sizeof(nick_out)); | ||||||
|  | 		if (is_halfop) | ||||||
|  | 			strlcat(nick_out, "%", sizeof(nick_out)); | ||||||
|  | 		if (is_voiced) | ||||||
|  | 			strlcat(nick_out, "+", sizeof(nick_out)); | ||||||
|  | 		strlcat(nick_out, ptr, sizeof(nick_out)); | ||||||
|  |  | ||||||
|  | 	      skip_njoin: | ||||||
|  | 		/* Get next nick, if any ... */ | ||||||
|  | 		ptr = strtok(NULL, ","); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/* forward to other servers */ | 	/* forward to other servers */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton