gem5  v20.1.0.0
Classes | Public Types | Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
VncServer Class Reference

#include <vncserver.hh>

Inheritance diagram for VncServer:
VncInput SimObject EventManager Serializable Drainable Stats::Group

Classes

class  DataEvent
 DataEvent to read data from vnc. More...
 
struct  FrameBufferRect
 
struct  FrameBufferUpdate
 
class  ListenEvent
 ListenEvent to accept a vnc client connection. More...
 
struct  ServerCutText
 
struct  ServerInitMsg
 

Public Types

enum  ServerMessages { ServerFrameBufferUpdate = 0, ServerSetColorMapEntries = 1, ServerBell = 2, ServerCutText = 3 }
 Server -> Client message IDs. More...
 
enum  EncodingTypes { EncodingRaw = 0, EncodingCopyRect = 1, EncodingHextile = 5, EncodingDesktopSize = -223 }
 Encoding types. More...
 
enum  MouseEvents { MouseLeftButton = 0x1, MouseRightButton = 0x2, MouseMiddleButton = 0x4 }
 keyboard/mouse support More...
 
enum  ConnectionState {
  WaitForProtocolVersion, WaitForSecurityResponse, WaitForClientInit, InitializationPhase,
  NormalPhase
}
 
typedef VncServerParams Params
 
- Public Types inherited from VncInput
enum  ClientMessages {
  ClientSetPixelFormat = 0, ClientSetEncodings = 2, ClientFrameBufferUpdate = 3, ClientKeyEvent = 4,
  ClientPointerEvent = 5, ClientCutText = 6
}
 Client -> Server message IDs. More...
 
typedef VncInputParams Params
 
- Public Types inherited from SimObject
typedef SimObjectParams Params
 

Public Member Functions

const char * vncVersion () const
 
 VncServer (const Params *p)
 VncServer. More...
 
 ~VncServer ()
 
void setDirty () override
 The frame buffer uses this call to notify the vnc server that the frame buffer has been updated and a new image needs to be sent to the client. More...
 
void frameBufferResized () override
 
- Public Member Functions inherited from VncInput
 VncInput (const Params *p)
 
virtual void setFrameBuffer (const FrameBuffer *rfb)
 Set the address of the frame buffer we are going to show. More...
 
void setKeyboard (VncKeyboard *_keyboard)
 Set up the device that would like to receive notifications when keys are pressed in the vnc client keyboard. More...
 
void setMouse (VncMouse *_mouse)
 Setup the device that would like to receive notifications when mouse movements or button presses are received from the vnc client. More...
 
uint16_t videoWidth () const
 What is the width of the screen we're displaying. More...
 
uint16_t videoHeight () const
 What is the height of the screen we're displaying. More...
 
- Public Member Functions inherited from SimObject
const Paramsparams () const
 
 SimObject (const Params *_params)
 
virtual ~SimObject ()
 
virtual const std::string name () const
 
virtual void init ()
 init() is called after all C++ SimObjects have been created and all ports are connected. More...
 
virtual void loadState (CheckpointIn &cp)
 loadState() is called on each SimObject when restoring from a checkpoint. More...
 
virtual void initState ()
 initState() is called on each SimObject when not restoring from a checkpoint. More...
 
virtual void regProbePoints ()
 Register probe points for this object. More...
 
virtual void regProbeListeners ()
 Register probe listeners for this object. More...
 
ProbeManagergetProbeManager ()
 Get the probe manager for this object. More...
 
virtual PortgetPort (const std::string &if_name, PortID idx=InvalidPortID)
 Get a port with a given name and index. More...
 
virtual void startup ()
 startup() is the final initialization call before simulation. More...
 
DrainState drain () override
 Provide a default implementation of the drain interface for objects that don't need draining. More...
 
virtual void memWriteback ()
 Write back dirty buffers to memory using functional writes. More...
 
virtual void memInvalidate ()
 Invalidate the contents of memory buffers. More...
 
void serialize (CheckpointOut &cp) const override
 Serialize an object. More...
 
void unserialize (CheckpointIn &cp) override
 Unserialize an object. More...
 
- Public Member Functions inherited from EventManager
EventQueueeventQueue () const
 
void schedule (Event &event, Tick when)
 
void deschedule (Event &event)
 
void reschedule (Event &event, Tick when, bool always=false)
 
void schedule (Event *event, Tick when)
 
void deschedule (Event *event)
 
void reschedule (Event *event, Tick when, bool always=false)
 
void wakeupEventQueue (Tick when=(Tick) -1)
 This function is not needed by the usual gem5 event loop but may be necessary in derived EventQueues which host gem5 on other schedulers. More...
 
void setCurTick (Tick newVal)
 
 EventManager (EventManager &em)
 Event manger manages events in the event queue. More...
 
 EventManager (EventManager *em)
 
 EventManager (EventQueue *eq)
 
- Public Member Functions inherited from Serializable
 Serializable ()
 
virtual ~Serializable ()
 
void serializeSection (CheckpointOut &cp, const char *name) const
 Serialize an object into a new section. More...
 
void serializeSection (CheckpointOut &cp, const std::string &name) const
 
void unserializeSection (CheckpointIn &cp, const char *name)
 Unserialize an a child object. More...
 
void unserializeSection (CheckpointIn &cp, const std::string &name)
 
- Public Member Functions inherited from Drainable
DrainState drainState () const
 Return the current drain state of an object. More...
 
virtual void notifyFork ()
 Notify a child process of a fork. More...
 
- Public Member Functions inherited from Stats::Group
 Group (Group *parent, const char *name=nullptr)
 Construct a new statistics group. More...
 
virtual ~Group ()
 
virtual void regStats ()
 Callback to set stat parameters. More...
 
virtual void resetStats ()
 Callback to reset stats. More...
 
virtual void preDumpStats ()
 Callback before stats are dumped. More...
 
void addStat (Stats::Info *info)
 Register a stat with this group. More...
 
const std::map< std::string, Group * > & getStatGroups () const
 Get all child groups associated with this object. More...
 
const std::vector< Info * > & getStats () const
 Get all stats associated with this object. More...
 
void addStatGroup (const char *name, Group *block)
 Add a stat block as a child of this block. More...
 
const InforesolveStat (std::string name) const
 Resolve a stat by its name within this group. More...
 
 Group ()=delete
 
 Group (const Group &)=delete
 
Groupoperator= (const Group &)=delete
 

Public Attributes

struct VncServer::ServerInitMsg M5_ATTR_PACKED
 
struct VncServer::FrameBufferUpdate M5_ATTR_PACKED
 
struct VncServer::FrameBufferRect M5_ATTR_PACKED
 
struct VncServer::ServerCutText M5_ATTR_PACKED
 
- Public Attributes inherited from VncInput
struct VncInput::PixelFormat M5_ATTR_PACKED
 
struct VncInput::PixelFormatMessage M5_ATTR_PACKED
 
struct VncInput::PixelEncodingsMessage M5_ATTR_PACKED
 
struct VncInput::FrameBufferUpdateReq M5_ATTR_PACKED
 
struct VncInput::KeyEventMessage M5_ATTR_PACKED
 
struct VncInput::PointerEventMessage M5_ATTR_PACKED
 
struct VncInput::ClientCutTextMessage M5_ATTR_PACKED
 

Static Public Attributes

const static uint32_t AuthInvalid = 0
 Authentication modes. More...
 
const static uint32_t AuthNone = 1
 
const static uint32_t VncOK = 0
 Error conditions. More...
 

Protected Member Functions

void listen (int port)
 
void accept ()
 
void data ()
 
void detach ()
 
void sendError (const char *error_msg)
 vnc client Interface More...
 
bool read (uint8_t *buf, size_t len)
 Read some data from the client. More...
 
bool read1 (uint8_t *buf, size_t len)
 Read len -1 bytes from the client into the buffer provided + 1 assert that we read enough bytes. More...
 
template<typename T >
bool read (T *val)
 Templated version of the read function above to read simple data to the client. More...
 
bool write (const uint8_t *buf, size_t len)
 Write a buffer to the client. More...
 
template<typename T >
bool write (T *val)
 Templated version of the write function above to write simple data to the client. More...
 
bool write (const char *str)
 Send a string to the client. More...
 
void checkProtocolVersion ()
 Check the client's protocol verion for compatibility and send the security types we support. More...
 
void checkSecurity ()
 Check that the security exchange was successful. More...
 
void sendServerInit ()
 Send client our idea about what the frame buffer looks like. More...
 
void sendError (std::string error_msg)
 Send an error message to the client when something goes wrong. More...
 
void sendFrameBufferUpdate ()
 Send a updated frame buffer to the client. More...
 
void setPixelFormat ()
 Receive pixel foramt message from client and process it. More...
 
void setEncodings ()
 Receive encodings message from client and process it. More...
 
void requestFbUpdate ()
 Receive message from client asking for updated frame buffer. More...
 
void recvKeyboardInput ()
 Receive message from client providing new keyboard input. More...
 
void recvPointerInput ()
 Recv message from client providing new mouse movement or button click. More...
 
void recvCutText ()
 Receive message from client that there is text in it's paste buffer. More...
 
void sendFrameBufferResized ()
 Tell the client that the frame buffer resized. More...
 
- Protected Member Functions inherited from VncInput
void captureFrameBuffer ()
 Captures the current frame buffer to a file. More...
 
- Protected Member Functions inherited from Drainable
 Drainable ()
 
virtual ~Drainable ()
 
virtual void drainResume ()
 Resume execution after a successful drain. More...
 
void signalDrainDone () const
 Signal that an object is drained. More...
 

Protected Attributes

ListenEventlistenEvent
 
DataEventdataEvent
 
int number
 
int dataFd
 
ListenSocket listener
 
ConnectionState curState
 The rfb prototol state the connection is in. More...
 
bool sendUpdate
 An update needs to be sent to the client. More...
 
PixelFormat pixelFormat
 The one and only pixel format we support. More...
 
bool supportsRawEnc
 If the vnc client supports receiving raw data. More...
 
bool supportsResizeEnc
 If the vnc client supports the desktop resize command. More...
 
- Protected Attributes inherited from VncInput
VncKeyboardkeyboard
 The device to notify when we get key events. More...
 
VncMousemouse
 The device to notify when we get mouse events. More...
 
const FrameBufferfb
 pointer to the actual data that is stored in the frame buffer device More...
 
uint16_t _videoWidth
 the width of the frame buffer we are sending to the client More...
 
uint16_t _videoHeight
 the height of the frame buffer we are sending to the client More...
 
bool captureEnabled
 Flag indicating whether to capture snapshots of frame buffer or not. More...
 
int captureCurrentFrame
 Current frame number being captured to a file. More...
 
OutputDirectorycaptureOutputDirectory
 Directory to store captured frames to. More...
 
uint64_t captureLastHash
 Computed hash of the last captured frame. More...
 
std::unique_ptr< ImgWritercaptureImage
 Cached ImgWriter object for writing out frame buffers to file. More...
 
Enums::ImageFormat imgFormat
 image format More...
 
- Protected Attributes inherited from SimObject
const SimObjectParams * _params
 Cached copy of the object parameters. More...
 
- Protected Attributes inherited from EventManager
EventQueueeventq
 A pointer to this object's event queue. More...
 

Static Protected Attributes

static const PixelConverter pixelConverter
 

Friends

class ListenEvent
 
class DataEvent
 

Additional Inherited Members

- Static Public Member Functions inherited from SimObject
static void serializeAll (CheckpointOut &cp)
 Serialize all SimObjects in the system. More...
 
static SimObjectfind (const char *name)
 Find the SimObject with the given name and return a pointer to it. More...
 
- Static Public Member Functions inherited from Serializable
static const std::string & currentSection ()
 Gets the fully-qualified name of the active section. More...
 
static void serializeAll (const std::string &cpt_dir)
 Serializes all the SimObjects. More...
 
static void unserializeGlobals (CheckpointIn &cp)
 

Detailed Description

Definition at line 58 of file vncserver.hh.

Member Typedef Documentation

◆ Params

typedef VncServerParams VncServer::Params

Definition at line 179 of file vncserver.hh.

Constructor & Destructor Documentation

◆ VncServer()

VncServer::VncServer ( const Params p)

◆ ~VncServer()

VncServer::~VncServer ( )

Definition at line 145 of file vncserver.cc.

References dataEvent, dataFd, and listenEvent.

Member Function Documentation

◆ accept()

void VncServer::accept ( )
protected

◆ checkProtocolVersion()

void VncServer::checkProtocolVersion ( )
protected

Check the client's protocol verion for compatibility and send the security types we support.

Definition at line 377 of file vncserver.cc.

References AuthInvalid, AuthNone, curState, detach(), DPRINTF, ArmISA::err, htobe(), ArmISA::len, read(), sendError(), WaitForProtocolVersion, WaitForSecurityResponse, warn, and write().

Referenced by data().

◆ checkSecurity()

void VncServer::checkSecurity ( )
protected

Check that the security exchange was successful.

Definition at line 429 of file vncserver.cc.

References AuthNone, curState, DPRINTF, htobe(), read(), sendError(), VncOK, WaitForClientInit, WaitForSecurityResponse, warn, and write().

Referenced by data().

◆ data()

void VncServer::data ( )
protected

◆ detach()

void VncServer::detach ( )
protected

◆ frameBufferResized()

void VncServer::frameBufferResized ( )
overridevirtual

Reimplemented from VncInput.

Definition at line 722 of file vncserver.cc.

References curState, dataFd, detach(), NormalPhase, sendFrameBufferResized(), and supportsResizeEnc.

◆ listen()

void VncServer::listen ( int  port)
protected

◆ read() [1/2]

template<typename T >
bool VncServer::read ( T *  val)
protected

Templated version of the read function above to read simple data to the client.

Parameters
valdata to recv from the client

Definition at line 310 of file vncserver.cc.

References read(), and X86ISA::val.

◆ read() [2/2]

bool VncServer::read ( uint8_t *  buf,
size_t  len 
)
protected

Read some data from the client.

Parameters
bufthe data to read
lenthe amount of data to read
Returns
whether the read was successful

Definition at line 281 of file vncserver.cc.

References dataFd, detach(), DPRINTF, ArmISA::len, and panic.

Referenced by checkProtocolVersion(), checkSecurity(), data(), read(), read1(), recvCutText(), and setEncodings().

◆ read1()

bool VncServer::read1 ( uint8_t *  buf,
size_t  len 
)
protected

Read len -1 bytes from the client into the buffer provided + 1 assert that we read enough bytes.

This function exists to handle reading all of the protocol structs above when we've already read the first byte which describes which one we're reading

Parameters
bufthe address of the buffer to add one to and read data into
lenthe amount of data + 1 to read
Returns
whether the read was successful.

Definition at line 302 of file vncserver.cc.

References ArmISA::len, and read().

Referenced by recvCutText(), recvKeyboardInput(), recvPointerInput(), requestFbUpdate(), setEncodings(), and setPixelFormat().

◆ recvCutText()

void VncServer::recvCutText ( )
protected

Receive message from client that there is text in it's paste buffer.

This is a no-op at the moment, but perhaps we would want to be able to paste it at some point.

Definition at line 603 of file vncserver.cc.

References betoh(), DPRINTF, read(), and read1().

Referenced by data().

◆ recvKeyboardInput()

void VncServer::recvKeyboardInput ( )
protected

Receive message from client providing new keyboard input.

Definition at line 569 of file vncserver.cc.

References betoh(), DPRINTF, VncInput::KeyEventMessage::key, VncInput::keyboard, VncKeyboard::keyPress(), and read1().

Referenced by data().

◆ recvPointerInput()

void VncServer::recvPointerInput ( )
protected

Recv message from client providing new mouse movement or button click.

Definition at line 585 of file vncserver.cc.

References betoh(), DPRINTF, VncInput::mouse, VncMouse::mouseAt(), read1(), and VncInput::PointerEventMessage::x.

Referenced by data().

◆ requestFbUpdate()

void VncServer::requestFbUpdate ( )
protected

Receive message from client asking for updated frame buffer.

Definition at line 549 of file vncserver.cc.

References betoh(), DPRINTF, read1(), sendFrameBufferUpdate(), and VncInput::FrameBufferUpdateReq::x.

Referenced by data().

◆ sendError() [1/2]

void VncServer::sendError ( const char *  error_msg)
protected

vnc client Interface

Send an error message to the client

Parameters
error_msgtext to send describing the error

Definition at line 368 of file vncserver.cc.

References ArmISA::len, and write().

Referenced by checkProtocolVersion(), and checkSecurity().

◆ sendError() [2/2]

void VncServer::sendError ( std::string  error_msg)
protected

Send an error message to the client when something goes wrong.

Parameters
error_msgerror to send

◆ sendFrameBufferResized()

void VncServer::sendFrameBufferResized ( )
protected

◆ sendFrameBufferUpdate()

void VncServer::sendFrameBufferUpdate ( )
protected

◆ sendServerInit()

void VncServer::sendServerInit ( )
protected

◆ setDirty()

void VncServer::setDirty ( )
overridevirtual

The frame buffer uses this call to notify the vnc server that the frame buffer has been updated and a new image needs to be sent to the client.

Reimplemented from VncInput.

Definition at line 713 of file vncserver.cc.

References sendFrameBufferUpdate(), sendUpdate, and VncInput::setDirty().

◆ setEncodings()

void VncServer::setEncodings ( )
protected

Receive encodings message from client and process it.

Definition at line 513 of file vncserver.cc.

References betoh(), detach(), DPRINTF, ArmISA::encoding, EncodingDesktopSize, EncodingRaw, VncInput::PixelEncodingsMessage::num_encodings, read(), read1(), supportsRawEnc, supportsResizeEnc, warn, and RiscvISA::x.

Referenced by data().

◆ setPixelFormat()

void VncServer::setPixelFormat ( )
protected

◆ write() [1/3]

bool VncServer::write ( const char *  str)
protected

Send a string to the client.

Parameters
strstring to transmit

Definition at line 341 of file vncserver.cc.

References write().

◆ write() [2/3]

bool VncServer::write ( const uint8_t *  buf,
size_t  len 
)
protected

Write a buffer to the client.

Parameters
bufbuffer to send
lenlength of the buffer
Returns
whether the write was successful

Definition at line 317 of file vncserver.cc.

References atomic_write(), dataFd, detach(), DPRINTF, ArmISA::len, and panic.

Referenced by accept(), checkProtocolVersion(), checkSecurity(), sendError(), sendFrameBufferResized(), sendFrameBufferUpdate(), sendServerInit(), and write().

◆ write() [3/3]

template<typename T >
bool VncServer::write ( T *  val)
protected

Templated version of the write function above to write simple data to the client.

Parameters
valdata to send to the client

Definition at line 335 of file vncserver.cc.

References X86ISA::val, and write().

Friends And Related Function Documentation

◆ DataEvent

friend class DataEvent
friend

Definition at line 165 of file vncserver.hh.

Referenced by accept().

◆ ListenEvent

friend class ListenEvent
friend

Definition at line 151 of file vncserver.hh.

Referenced by listen().

Member Data Documentation

◆ curState

ConnectionState VncServer::curState
protected

The rfb prototol state the connection is in.

Definition at line 187 of file vncserver.hh.

Referenced by checkProtocolVersion(), checkSecurity(), data(), detach(), frameBufferResized(), sendFrameBufferResized(), sendFrameBufferUpdate(), sendServerInit(), and VncServer().

◆ dataEvent

DataEvent* VncServer::dataEvent
protected

Definition at line 166 of file vncserver.hh.

Referenced by accept(), detach(), and ~VncServer().

◆ dataFd

int VncServer::dataFd
protected

◆ listener

ListenSocket VncServer::listener
protected

Definition at line 171 of file vncserver.hh.

Referenced by accept(), and listen().

◆ listenEvent

ListenEvent* VncServer::listenEvent
protected

Definition at line 152 of file vncserver.hh.

Referenced by listen(), and ~VncServer().

◆ number

int VncServer::number
protected

Definition at line 168 of file vncserver.hh.

Referenced by detach().

◆ pixelConverter

const PixelConverter VncServer::pixelConverter
staticprotected

Definition at line 303 of file vncserver.hh.

Referenced by sendFrameBufferUpdate(), and VncServer().

◆ pixelFormat

PixelFormat VncServer::pixelFormat
protected

The one and only pixel format we support.

Definition at line 194 of file vncserver.hh.

Referenced by sendServerInit(), setPixelFormat(), and VncServer().

◆ sendUpdate

bool VncServer::sendUpdate
protected

An update needs to be sent to the client.

Without doing this the client will constantly request data that is pointless

Definition at line 191 of file vncserver.hh.

Referenced by sendFrameBufferUpdate(), and setDirty().

◆ supportsRawEnc

bool VncServer::supportsRawEnc
protected

If the vnc client supports receiving raw data.

It always should

Definition at line 197 of file vncserver.hh.

Referenced by setEncodings().

◆ supportsResizeEnc

bool VncServer::supportsResizeEnc
protected

If the vnc client supports the desktop resize command.

Definition at line 200 of file vncserver.hh.

Referenced by frameBufferResized(), and setEncodings().


The documentation for this class was generated from the following files:

Generated on Wed Sep 30 2020 14:02:34 for gem5 by doxygen 1.8.17