-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcdp_message.c
More file actions
86 lines (78 loc) · 2.3 KB
/
cdp_message.c
File metadata and controls
86 lines (78 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "cdp_protocol.h"
#include "cdp_server.h"
extern int sockfd;
extern struct client_node client_list;
/**
* cast message to all listened clients
**/
void cdp_cast_message(void *buf, uint32_t length)
{
struct client_node *iter;
list_for_each_entry(iter, &client_list.list_node, list_node) {
sendto(sockfd, buf, length, 0, (struct sockaddr *)&iter->sockaddr, sizeof(struct sockaddr_in));
}
}
void cdp_message_create_window(cdp_window_t *window)
{
cdp_message_create_window_t msg;
msg.msgtype = CDP_MESSAGE_CREATE_WINDOW;
msg.window = window->id;
msg.x = window->x;
msg.y = window->y;
msg.width = window->width;
msg.height = window->height;
msg.override = window->override;
msg.viewable = window->viewable;
cdp_cast_message(&msg, sizeof(msg));
}
void cdp_message_destroy_window(u32 id)
{
cdp_message_destroy_window_t msg;
msg.msgtype = CDP_MESSAGE_DESTROY_WINDOW;
msg.window = id;
cdp_cast_message(&msg, sizeof(msg));
}
void cdp_message_show_window(cdp_window_t *window)
{
cdp_message_show_window_t msg;
msg.msgtype = CDP_MESSAGE_SHOW_WINDOW;
msg.window = window->id;
msg.override = window->override;
cdp_cast_message(&msg, sizeof(msg));
}
void cdp_message_hide_window(u32 id)
{
cdp_message_hide_window_t msg;
msg.msgtype = CDP_MESSAGE_HIDE_WINDOW;
msg.window = id;
cdp_cast_message(&msg, sizeof(msg));
}
void cdp_message_window_frame(u32 wid, char *frame_data, int size)
{
int length = sizeof(cdp_message_window_frame_t) + size;
padto4(&length);
char buf[length];
cdp_message_window_frame_t *msg = (cdp_message_window_frame_t*)buf;
msg->msgtype = CDP_MESSAGE_WINDOW_FRAME;
msg->length = length;
msg->window = wid;
msg->frame_size = size;
memcpy(&buf[sizeof(cdp_message_window_frame_t)], frame_data, size);
cdp_cast_message(buf, length);
}
void cdp_message_configure_window(cdp_window_t *window)
{
cdp_message_configure_window_t msg;
msg.msgtype = CDP_MESSAGE_CONFIGURE_WINDOW;
msg.window = window->id;
msg.x = window->x;
msg.y = window->y;
msg.width = window->width;
msg.height = window->height;
msg.override = window->override;
msg.above = window->above;
cdp_cast_message(&msg, sizeof(msg));
}