Esempio n. 1
0
int
SProcXSendExtensionEvent(ClientPtr client)
{
    CARD32 *p;
    int i;
    xEvent eventT;
    xEvent *eventP;
    EventSwapPtr proc;

    REQUEST(xSendExtensionEventReq);
    swaps(&stuff->length);
    REQUEST_AT_LEAST_SIZE(xSendExtensionEventReq);
    swapl(&stuff->destination);
    swaps(&stuff->count);

    if (stuff->length != bytes_to_int32(sizeof(xSendExtensionEventReq)) + stuff->count +
       bytes_to_int32(stuff->num_events * sizeof(xEvent)))
       return BadLength;

    eventP = (xEvent *) & stuff[1];
    for (i = 0; i < stuff->num_events; i++, eventP++) {
	proc = EventSwapVector[eventP->u.u.type & 0177];
	if (proc == NotImplemented)	/* no swapping proc; invalid event type? */
	    return BadValue;
	(*proc) (eventP, &eventT);
	*eventP = eventT;
    }

    p = (CARD32 *)(((xEvent *) & stuff[1]) + stuff->num_events);
    SwapLongs(p, stuff->count);
    return (ProcXSendExtensionEvent(client));
}
Esempio n. 2
0
int
ProcIDispatch(register ClientPtr client)
{
    REQUEST(xReq);
    if (stuff->data == X_GetExtensionVersion)
        return (ProcXGetExtensionVersion(client));
    if (stuff->data == X_ListInputDevices)
        return (ProcXListInputDevices(client));
    else if (stuff->data == X_OpenDevice)
        return (ProcXOpenDevice(client));
    else if (stuff->data == X_CloseDevice)
        return (ProcXCloseDevice(client));
    else if (stuff->data == X_SetDeviceMode)
        return (ProcXSetDeviceMode(client));
    else if (stuff->data == X_SelectExtensionEvent)
        return (ProcXSelectExtensionEvent(client));
    else if (stuff->data == X_GetSelectedExtensionEvents)
        return (ProcXGetSelectedExtensionEvents(client));
    else if (stuff->data == X_ChangeDeviceDontPropagateList)
        return (ProcXChangeDeviceDontPropagateList(client));
    else if (stuff->data == X_GetDeviceDontPropagateList)
        return (ProcXGetDeviceDontPropagateList(client));
    else if (stuff->data == X_GetDeviceMotionEvents)
        return (ProcXGetDeviceMotionEvents(client));
    else if (stuff->data == X_ChangeKeyboardDevice)
        return (ProcXChangeKeyboardDevice(client));
    else if (stuff->data == X_ChangePointerDevice)
        return (ProcXChangePointerDevice(client));
    else if (stuff->data == X_GrabDevice)
        return (ProcXGrabDevice(client));
    else if (stuff->data == X_UngrabDevice)
        return (ProcXUngrabDevice(client));
    else if (stuff->data == X_GrabDeviceKey)
        return (ProcXGrabDeviceKey(client));
    else if (stuff->data == X_UngrabDeviceKey)
        return (ProcXUngrabDeviceKey(client));
    else if (stuff->data == X_GrabDeviceButton)
        return (ProcXGrabDeviceButton(client));
    else if (stuff->data == X_UngrabDeviceButton)
        return (ProcXUngrabDeviceButton(client));
    else if (stuff->data == X_AllowDeviceEvents)
        return (ProcXAllowDeviceEvents(client));
    else if (stuff->data == X_GetDeviceFocus)
        return (ProcXGetDeviceFocus(client));
    else if (stuff->data == X_SetDeviceFocus)
        return (ProcXSetDeviceFocus(client));
    else if (stuff->data == X_GetFeedbackControl)
        return (ProcXGetFeedbackControl(client));
    else if (stuff->data == X_ChangeFeedbackControl)
        return (ProcXChangeFeedbackControl(client));
    else if (stuff->data == X_GetDeviceKeyMapping)
        return (ProcXGetDeviceKeyMapping(client));
    else if (stuff->data == X_ChangeDeviceKeyMapping)
        return (ProcXChangeDeviceKeyMapping(client));
    else if (stuff->data == X_GetDeviceModifierMapping)
        return (ProcXGetDeviceModifierMapping(client));
    else if (stuff->data == X_SetDeviceModifierMapping)
        return (ProcXSetDeviceModifierMapping(client));
    else if (stuff->data == X_GetDeviceButtonMapping)
        return (ProcXGetDeviceButtonMapping(client));
    else if (stuff->data == X_SetDeviceButtonMapping)
        return (ProcXSetDeviceButtonMapping(client));
    else if (stuff->data == X_QueryDeviceState)
        return (ProcXQueryDeviceState(client));
    else if (stuff->data == X_SendExtensionEvent)
        return (ProcXSendExtensionEvent(client));
    else if (stuff->data == X_DeviceBell)
        return (ProcXDeviceBell(client));
    else if (stuff->data == X_SetDeviceValuators)
        return (ProcXSetDeviceValuators(client));
    else if (stuff->data == X_GetDeviceControl)
        return (ProcXGetDeviceControl(client));
    else if (stuff->data == X_ChangeDeviceControl)
        return (ProcXChangeDeviceControl(client));
    else {
        SendErrorToClient(client, IReqCode, stuff->data, 0, BadRequest);
    }
    return (BadRequest);
}
Esempio n. 3
0
int _X_COLD
SProcXSendExtensionEvent(ClientPtr client)
{
    CARD32 *p;
    int i;
    xEvent eventT = { .u.u.type = 0 };
    xEvent *eventP;
    EventSwapPtr proc;

    REQUEST(xSendExtensionEventReq);
    swaps(&stuff->length);
    REQUEST_AT_LEAST_SIZE(xSendExtensionEventReq);
    swapl(&stuff->destination);
    swaps(&stuff->count);

    if (stuff->length !=
        bytes_to_int32(sizeof(xSendExtensionEventReq)) + stuff->count +
        bytes_to_int32(stuff->num_events * sizeof(xEvent)))
        return BadLength;

    eventP = (xEvent *) &stuff[1];
    for (i = 0; i < stuff->num_events; i++, eventP++) {
        if (eventP->u.u.type == GenericEvent) {
            client->errorValue = eventP->u.u.type;
            return BadValue;
        }

        proc = EventSwapVector[eventP->u.u.type & 0177];
        /* no swapping proc; invalid event type? */
        if (proc == NotImplemented) {
            client->errorValue = eventP->u.u.type;
            return BadValue;
        }
        (*proc) (eventP, &eventT);
        *eventP = eventT;
    }

    p = (CARD32 *) (((xEvent *) &stuff[1]) + stuff->num_events);
    SwapLongs(p, stuff->count);
    return (ProcXSendExtensionEvent(client));
}

/***********************************************************************
 *
 * Send an event to some client, as if it had come from an extension input
 * device.
 *
 */

int
ProcXSendExtensionEvent(ClientPtr client)
{
    int ret, i;
    DeviceIntPtr dev;
    xEvent *first;
    XEventClass *list;
    struct tmask tmp[EMASKSIZE];

    REQUEST(xSendExtensionEventReq);
    REQUEST_AT_LEAST_SIZE(xSendExtensionEventReq);

    if (stuff->length !=
        bytes_to_int32(sizeof(xSendExtensionEventReq)) + stuff->count +
        (stuff->num_events * bytes_to_int32(sizeof(xEvent))))
        return BadLength;

    ret = dixLookupDevice(&dev, stuff->deviceid, client, DixWriteAccess);
    if (ret != Success)
        return ret;

    if (stuff->num_events == 0)
        return ret;

    /* The client's event type must be one defined by an extension. */

    first = ((xEvent *) &stuff[1]);
    for (i = 0; i < stuff->num_events; i++) {
        if (!((EXTENSION_EVENT_BASE <= first[i].u.u.type) &&
            (first[i].u.u.type < lastEvent))) {
            client->errorValue = first[i].u.u.type;
            return BadValue;
        }
    }

    list = (XEventClass *) (first + stuff->num_events);
    if ((ret = CreateMaskFromList(client, list, stuff->count, tmp, dev,
                                  X_SendExtensionEvent)) != Success)
        return ret;

    ret = (SendEvent(client, dev, stuff->destination,
                     stuff->propagate, (xEvent *) &stuff[1],
                     tmp[stuff->deviceid].mask, stuff->num_events));

    return ret;
}