#include #include #include "lx.h" #include "proto.h" #include "internal.h" void lx_ChangeHosts(LX_CONN *xc, LX_CHANGEHOSTSMODE mode, LX_HOSTTYPE type, int datalen, const void *data) { unsigned char *req; int rl; int m; int t; const unsigned char *pd; if ((xc->flags & XCF_FAIL) || (datalen < 0) || (datalen > 65535)) { lx__bad_call(xc,"lx_ChangeHosts"); return; } lx__nochain(xc); pd = data; m = lx__changehostsmode_to_proto(mode); if (type == LX_HOSTTYPE_Other) { if (datalen < 1) { lx__bad_call(xc,"lx_ChangeHosts"); return; } t = pd[0]; pd ++; datalen --; } else { t = lx__hosttype_to_proto(type); } if ((m < 0) || (t < 0)) { lx__bad_call(xc,"lx_ChangeHosts"); return; } rl = 8 + ((datalen + 3) & ~3); req = malloc(rl); if (! req) { lx__nomem_fail(xc); return; } req[0] = XP_REQ_ChangeHosts; req[1] = m; w_card16(req+2,rl>>2); req[4] = t; req[5] = 0; w_card16(req+6,datalen); if (datalen) bcopy(data,req+8,datalen); lx__send_req_free(xc,req,rl); }