i think i got you covered hex
  assuming that you can pass the url of a specific file with the ftp/http cod you have in your client (i'm assuming you lifted something from lynx or a mozilla or whatever) 
 you need to implemnt 1 additional cvar that gets changed in the server's config for each map 
 so in the server's config instead of having  
 map mp/ctf_ns_streets  
 you'd need  
 map mp/ctf_ns_streets ; g_currentmapUrl 
www.whatever.com/ctf_ns_streets.pk3)   
 now that you've got that cvar in, check out "void CG_ParseServerinfo( void )" in cg_servercmds.c this is where the client reads all the server's relavant cvars and is where you can send the g_currenmapUrl to the client without having them load the map. of course you'd need a client side struct to store the information in. i don't think it's really nessicary to store it clientside in a cvar 
 i don't think we can automatically being downloading in the client via your http/ftp module because it seems to be in the engine and outside the scope of the sdk 
 i could be wrong 
 but, if the server keeps automatic downloading off, and sends the map url to every client that tries to connect, then the clients can simpling run a command (when/if the map load fails) like /getmap (or something) that would pass the url from g_currentmapUrl (now stored in a clientside struct) to your http/ftp module and begin the tansfer and perhaps do /reconnect automatically when it's done?  
 or, check outvoid UI_DrawConnectScreen( qboolean overlay )  
 this function does the screen drawing for when the engine starts it's download, but since it's at the correct time, maaaaybe in   
 case CA_CONNECTED  
 you could perform the key sequence to break out of the download (i think it's escape) and start your tranfer module? i guess it'd work.  
 now, care to share with us how you got http/ftp working? i've looked at serveral of the smaller command line ftp clients and i've got some ideas but it'd be really helpful if you'd share it with us 
 :) 
 -stu