aboutsummaryrefslogtreecommitdiff
path: root/nxcomp/src/ServerProxy.h
blob: e169c4aec4bc6726d83d7ea3dbef6475d033c34b (plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/**************************************************************************/
/*                                                                        */
/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com)          */
/* Copyright (c) 2008-2014 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de>  */
/* Copyright (c) 2014-2016 Ulrich Sibiller <uli42@gmx.de>                 */
/* Copyright (c) 2014-2016 Mihai Moldovan <ionic@ionic.de>                */
/* Copyright (c) 2011-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com)           */
/*                                                                        */
/* NXCOMP, NX protocol compression and NX extensions to this software     */
/* are copyright of the aforementioned persons and companies.             */
/*                                                                        */
/* Redistribution and use of the present software is allowed according    */
/* to terms specified in the file LICENSE.nxcomp which comes in the       */
/* source distribution.                                                   */
/*                                                                        */
/* All rights reserved.                                                   */
/*                                                                        */
/* NOTE: This software has received contributions from various other      */
/* contributors, only the core maintainers and supporters are listed as   */
/* copyright holders. Please contact us, if you feel you should be listed */
/* as copyright holder, as well.                                          */
/*                                                                        */
/**************************************************************************/

#ifndef ServerProxy_H
#define ServerProxy_H

#include <sys/types.h>
#include <sys/socket.h>

#include "Proxy.h"

#include "Misc.h"
#include "ChannelEndPoint.h"

//
// Set the verbosity level.
//

#undef  TEST
#undef  DEBUG

class ServerProxy : public Proxy
{
  public:

  ServerProxy(int proxyFd);

  virtual ~ServerProxy();

  virtual void handleDisplayConfiguration(const char *xServerDisplay, int xServerAddrFamily,
                                              sockaddr *xServerAddr, unsigned int xServerAddrLength);

  virtual void handlePortConfiguration(ChannelEndPoint &cupsServerPort,
                                       ChannelEndPoint &smbServerPort,
                                       ChannelEndPoint &mediaServerPort,
                                       ChannelEndPoint &httpServerPort,
                                       const char *fontServerPort);

  protected:

  //
  // Create a new channel.
  //

  virtual int handleNewConnection(T_channel_type type, int clientFd);

  virtual int handleNewConnectionFromProxy(T_channel_type type, int channelId);

  virtual int handleNewAgentConnection(Agent *agent);

  virtual int handleNewXConnection(int clientFd);

  virtual int handleNewXConnectionFromProxy(int channelId);

  //
  // Implement persistence according
  // to our proxy mode.
  //

  virtual int handleLoad(T_load_type type)
  {
    return 0;
  }

  virtual int handleSave()
  {
    return 0;
  }

  virtual int handleAsyncEvents()
  {
    return 0;
  }

  virtual int handleLoadFromProxy();
  virtual int handleSaveFromProxy();

  virtual int handleSaveAllStores(ostream *cachefs, md5_state_t *md5StateStream,
                                      md5_state_t *md5StateClient) const;

  virtual int handleLoadAllStores(istream *cachefs, md5_state_t *md5StateStream) const;

  int handleCheckDrop();
  int handleCheckLoad();

  //
  // Utility function used to realize
  // a new connection.
  //

  protected:

  virtual int checkLocalChannelMap(int channelId)
  {
    // Since ProtoStep7 (#issue 108)
    return ((channelId & control -> ChannelMask) == 0);
  }

  private:

  // FIXME: Use a ChannelEndPoint object also for the X server!
  int xServerAddrFamily_;
  sockaddr *xServerAddr_;
  unsigned int xServerAddrLength_;

  //
  // This is the name of the X display where
  // we are going to forward connections.
  //

  char *xServerDisplay_;

  //
  // Ports where to forward extended services'
  // TCP connections.
  //

  ChannelEndPoint cupsServerPort_;
  ChannelEndPoint smbServerPort_;
  ChannelEndPoint mediaServerPort_;
  ChannelEndPoint httpServerPort_;

  //
  // It will have to be passed to the channel
  // so that it can set the port where the
  // font server connections are tunneled.
  //

  char *fontServerPort_;
};

#endif /* ServerProxy_H */