Home | History | Annotate | Line # | Download | only in libcc1
connection.hh revision 1.1.1.1.4.1
      1          1.1     mrg /* Plugin connection declarations
      2  1.1.1.1.4.1  martin    Copyright (C) 2014-2017 Free Software Foundation, Inc.
      3          1.1     mrg 
      4          1.1     mrg This file is part of GCC.
      5          1.1     mrg 
      6          1.1     mrg GCC is free software; you can redistribute it and/or modify it under
      7          1.1     mrg the terms of the GNU General Public License as published by the Free
      8          1.1     mrg Software Foundation; either version 3, or (at your option) any later
      9          1.1     mrg version.
     10          1.1     mrg 
     11          1.1     mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     12          1.1     mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13          1.1     mrg FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14          1.1     mrg for more details.
     15          1.1     mrg 
     16          1.1     mrg You should have received a copy of the GNU General Public License
     17          1.1     mrg along with GCC; see the file COPYING3.  If not see
     18          1.1     mrg <http://www.gnu.org/licenses/>.  */
     19          1.1     mrg 
     20          1.1     mrg #ifndef CC1_PLUGIN_CONNECTION_HH
     21          1.1     mrg #define CC1_PLUGIN_CONNECTION_HH
     22          1.1     mrg 
     23          1.1     mrg #include "status.hh"
     24          1.1     mrg #include "callbacks.hh"
     25          1.1     mrg 
     26          1.1     mrg namespace cc1_plugin
     27          1.1     mrg {
     28          1.1     mrg   // The connection class represents one side of the connection
     29          1.1     mrg   // between the gdb-side library and the gcc plugin.  It handles the
     30          1.1     mrg   // low-level details of reading and writing data.
     31          1.1     mrg   class connection
     32          1.1     mrg   {
     33          1.1     mrg   public:
     34          1.1     mrg 
     35          1.1     mrg     connection (int fd)
     36          1.1     mrg       : m_fd (fd),
     37          1.1     mrg 	m_aux_fd (-1),
     38          1.1     mrg 	m_callbacks ()
     39          1.1     mrg     {
     40          1.1     mrg     }
     41          1.1     mrg 
     42          1.1     mrg     connection (int fd, int aux_fd)
     43          1.1     mrg       : m_fd (fd),
     44          1.1     mrg 	m_aux_fd (aux_fd),
     45          1.1     mrg 	m_callbacks ()
     46          1.1     mrg     {
     47          1.1     mrg     }
     48          1.1     mrg 
     49          1.1     mrg     virtual ~connection ();
     50          1.1     mrg 
     51          1.1     mrg     // Send a single character.  This is used to introduce various
     52          1.1     mrg     // higher-level protocol elements.
     53          1.1     mrg     status send (char c);
     54          1.1     mrg 
     55          1.1     mrg     // Send data in bulk.
     56          1.1     mrg     status send (const void *buf, int len);
     57          1.1     mrg 
     58          1.1     mrg     // Read a single byte from the connection and verify that it
     59          1.1     mrg     // matches the argument C.
     60          1.1     mrg     status require (char c);
     61          1.1     mrg 
     62          1.1     mrg     // Read data in bulk.
     63          1.1     mrg     status get (void *buf, int len);
     64          1.1     mrg 
     65          1.1     mrg     // This is called after a query (remote function call) has been
     66          1.1     mrg     // sent to the remote.  It waits for a response packet.  The
     67          1.1     mrg     // response character is read before returning.  Any query packets
     68          1.1     mrg     // sent from the remote while waiting for a response are handled
     69          1.1     mrg     // by this function.
     70          1.1     mrg     status wait_for_result ()
     71          1.1     mrg     {
     72          1.1     mrg       return do_wait (true);
     73          1.1     mrg     }
     74          1.1     mrg 
     75          1.1     mrg     // Read and respond to query packets sent by the remote.  This
     76          1.1     mrg     // function returns when the connection is closed.
     77          1.1     mrg     status wait_for_query ()
     78          1.1     mrg     {
     79          1.1     mrg       return do_wait (false);
     80          1.1     mrg     }
     81          1.1     mrg 
     82          1.1     mrg     // Register a callback with this connection.  NAME is the name of
     83          1.1     mrg     // the method being registered.  FUNC is the function.  It must
     84          1.1     mrg     // know how to decode its own arguments.  When a query packet is
     85          1.1     mrg     // received by one of the wait_* methods, the corresponding
     86          1.1     mrg     // callback is invoked.
     87          1.1     mrg     void add_callback (const char *name, callback_ftype *func)
     88          1.1     mrg     {
     89          1.1     mrg       m_callbacks.add_callback (name, func);
     90          1.1     mrg     }
     91          1.1     mrg 
     92          1.1     mrg     virtual void print (const char *);
     93          1.1     mrg 
     94          1.1     mrg   private:
     95          1.1     mrg 
     96          1.1     mrg     // Declared but not defined, to prevent use.
     97          1.1     mrg     connection (const connection &);
     98          1.1     mrg     connection &operator= (const connection &);
     99          1.1     mrg 
    100          1.1     mrg     // Helper function for the wait_* methods.
    101          1.1     mrg     status do_wait (bool);
    102          1.1     mrg 
    103          1.1     mrg     // The file descriptor.
    104          1.1     mrg     int m_fd;
    105          1.1     mrg 
    106          1.1     mrg     // An auxiliary file descriptor, or -1 if none.
    107          1.1     mrg     int m_aux_fd;
    108          1.1     mrg 
    109          1.1     mrg     // Callbacks associated with this connection.
    110          1.1     mrg     callbacks m_callbacks;
    111          1.1     mrg   };
    112          1.1     mrg }
    113          1.1     mrg 
    114          1.1     mrg #endif // CC1_PLUGIN_CONNECTION_HH
    115