1 /*
2  * This file is part of the SSH Library
3  *
4  * Copyright (c) 2009 by Aris Adamantiadis
5  *
6  * The SSH Library is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or (at your
9  * option) any later version.
10  *
11  * The SSH Library is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14  * License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with the SSH Library; see the file COPYING.  If not, write to
18  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
19  * MA 02111-1307, USA.
20  */
21 
22 #ifndef MESSAGES_H_
23 #define MESSAGES_H_
24 
25 #include "config.h"
26 
27 struct ssh_auth_request {
28     char *username;
29     int method;
30     char *password;
31     struct ssh_key_struct *pubkey;
32     char signature_state;
33     char kbdint_response;
34 };
35 
36 struct ssh_channel_request_open {
37     int type;
38     uint32_t sender;
39     uint32_t window;
40     uint32_t packet_size;
41     char *originator;
42     uint16_t originator_port;
43     char *destination;
44     uint16_t destination_port;
45 };
46 
47 struct ssh_service_request {
48     char *service;
49 };
50 
51 struct ssh_global_request {
52     int type;
53     uint8_t want_reply;
54     char *bind_address;
55     uint16_t bind_port;
56 };
57 
58 struct ssh_channel_request {
59     int type;
60     ssh_channel channel;
61     uint8_t want_reply;
62     /* pty-req type specifics */
63     char *TERM;
64     uint32_t width;
65     uint32_t height;
66     uint32_t pxwidth;
67     uint32_t pxheight;
68     ssh_string modes;
69 
70     /* env type request */
71     char *var_name;
72     char *var_value;
73     /* exec type request */
74     char *command;
75     /* subsystem */
76     char *subsystem;
77 
78     /* X11 */
79     uint8_t x11_single_connection;
80     const char *x11_auth_protocol;
81     const char *x11_auth_cookie;
82     uint32_t x11_screen_number;
83 };
84 
85 struct ssh_message_struct {
86     ssh_session session;
87     int type;
88     struct ssh_auth_request auth_request;
89     struct ssh_channel_request_open channel_request_open;
90     struct ssh_channel_request channel_request;
91     struct ssh_service_request service_request;
92     struct ssh_global_request global_request;
93 };
94 
95 SSH_PACKET_CALLBACK(ssh_packet_channel_open);
96 SSH_PACKET_CALLBACK(ssh_packet_service_request);
97 SSH_PACKET_CALLBACK(ssh_packet_userauth_request);
98 SSH_PACKET_CALLBACK(ssh_packet_global_request);
99 
100 int ssh_message_handle_channel_request(ssh_session session, ssh_channel channel, ssh_buffer packet,
101     const char *request, uint8_t want_reply);
102 void ssh_message_queue(ssh_session session, ssh_message message);
103 ssh_message ssh_message_pop_head(ssh_session session);
104 
105 #endif /* MESSAGES_H_ */
106