static void send_alive(struct sockaddr *from, int fromlen, int length, int fd) { CARD32 sessionID; CARD16 displayNumber; struct display *d; XdmcpHeader header; CARD8 sendRunning; CARD32 sendSessionID; Debug("send <alive>\n"); if(XdmcpReadCARD16(&buffer, &displayNumber) && XdmcpReadCARD32(&buffer, &sessionID)) { if(length == 6) { if(!(d = FindDisplayBySessionID(sessionID))) d = FindDisplayByAddress((XdmcpNetaddr)from, fromlen, displayNumber); sendRunning = 0; sendSessionID = 0; if(d && d->status == running) { if(d->sessionID == sessionID) sendRunning = 1; sendSessionID = d->sessionID; } header.version = XDM_PROTOCOL_VERSION; header.opcode = (CARD16)ALIVE; header.length = 5; Debug("<alive>: %d %ld\n", sendRunning, (long)sendSessionID); XdmcpWriteHeader(&buffer, &header); XdmcpWriteCARD8(&buffer, sendRunning); XdmcpWriteCARD32(&buffer, sendSessionID); XdmcpFlush(fd, &buffer, (XdmcpNetaddr)from, fromlen); } } }
static void send_refuse(struct sockaddr *from, int fromlen, CARD32 sessionID, int fd) { XdmcpHeader header; Debug("send <refuse> %ld\n", (long)sessionID); header.version = XDM_PROTOCOL_VERSION; header.opcode = (CARD16)REFUSE; header.length = 4; XdmcpWriteHeader(&buffer, &header); XdmcpWriteCARD32(&buffer, sessionID); XdmcpFlush(fd, &buffer, (XdmcpNetaddr)from, fromlen); }
static void send_failed(struct sockaddr *from, int fromlen, const char *name, CARD32 sessionID, const char *reason, int fd) { char buf[360]; XdmcpHeader header; ARRAY8 status; sprintf(buf, "Session %ld failed for display %.260s: %s", (long)sessionID, name, reason); Debug("send_failed(%\"s)\n", buf); status.length = strlen(buf); status.data = (CARD8Ptr)buf; header.version = XDM_PROTOCOL_VERSION; header.opcode = (CARD16)FAILED; header.length = 6 + status.length; XdmcpWriteHeader(&buffer, &header); XdmcpWriteCARD32(&buffer, sessionID); XdmcpWriteARRAY8(&buffer, &status); XdmcpFlush(fd, &buffer, (XdmcpNetaddr)from, fromlen); }
static void send_keepalive_msg(void) { XdmcpHeader header; int socketfd = xdmcpSocket; header.version = XDM_PROTOCOL_VERSION; header.opcode = (CARD16) KEEPALIVE; header.length = 6; XdmcpWriteHeader(&buffer, &header); XdmcpWriteCARD16(&buffer, DisplayNumber); XdmcpWriteCARD32(&buffer, SessionID); state = XDM_AWAIT_ALIVE_RESPONSE; #if defined(IPv6) && defined(AF_INET6) if (SOCKADDR_FAMILY(req_sockaddr) == AF_INET6) socketfd = xdmcpSocket6; #endif XdmcpFlush(socketfd, &buffer, (XdmcpNetaddr) &req_sockaddr, req_socklen); }
static void send_accept(struct sockaddr *to, int tolen, CARD32 sessionID, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr authorizationName, ARRAY8Ptr authorizationData, int fd) { XdmcpHeader header; Debug("<accept> session ID %ld\n", (long)sessionID); header.version = XDM_PROTOCOL_VERSION; header.opcode = (CARD16)ACCEPT; header.length = 4; /* session ID */ header.length += 2 + authenticationName->length; header.length += 2 + authenticationData->length; header.length += 2 + authorizationName->length; header.length += 2 + authorizationData->length; XdmcpWriteHeader(&buffer, &header); XdmcpWriteCARD32(&buffer, sessionID); XdmcpWriteARRAY8(&buffer, authenticationName); XdmcpWriteARRAY8(&buffer, authenticationData); XdmcpWriteARRAY8(&buffer, authorizationName); XdmcpWriteARRAY8(&buffer, authorizationData); XdmcpFlush(fd, &buffer, (XdmcpNetaddr)to, tolen); }
static void send_manage_msg(void) { XdmcpHeader header; int socketfd = xdmcpSocket; header.version = XDM_PROTOCOL_VERSION; header.opcode = (CARD16) MANAGE; header.length = 8 + DisplayClass.length; if (!XdmcpWriteHeader(&buffer, &header)) return; XdmcpWriteCARD32(&buffer, SessionID); XdmcpWriteCARD16(&buffer, DisplayNumber); XdmcpWriteARRAY8(&buffer, &DisplayClass); state = XDM_AWAIT_MANAGE_RESPONSE; #if defined(IPv6) && defined(AF_INET6) if (SOCKADDR_FAMILY(req_sockaddr) == AF_INET6) socketfd = xdmcpSocket6; #endif XdmcpFlush(socketfd, &buffer, (XdmcpNetaddr) &req_sockaddr, req_socklen); }