Пример #1
0
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);
        }
    }
}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
0
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);
}
Пример #5
0
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);
}
Пример #6
0
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);
}