This file is indexed.

/usr/include/ola/network/Socket.h is in libola-dev 0.9.1-1.1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
155
156
157
158
159
160
161
162
163
164
165
166
/*
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 *
 * Socket.h
 * The Socket interfaces
 * Copyright (C) 2005 Simon Newton
 *
 *  - UDPSocket, allows sending and receiving UDP datagrams
 *  - TCPSocket, this represents a TCP connection to a remote endpoint
 *
 * AcceptingSocket is the interface that defines sockets which can spawn new
 * ConnectedDescriptors. TCPAcceptingSocket is the only subclass and provides
 * the accept() functionality.
 */

#ifndef INCLUDE_OLA_NETWORK_SOCKET_H_
#define INCLUDE_OLA_NETWORK_SOCKET_H_

#include <stdint.h>

#include <ola/Callback.h>
#include <ola/base/Macro.h>
#include <ola/io/Descriptor.h>
#include <ola/io/IOQueue.h>
#include <ola/network/IPV4Address.h>
#include <ola/network/SocketAddress.h>
#include <string>


namespace ola {
namespace network {


/*
 * The UDPSocketInterface.
 * This is done as an Interface so we can mock it out for testing.
 */
class UDPSocketInterface: public ola::io::BidirectionalFileDescriptor {
 public:
  UDPSocketInterface(): ola::io::BidirectionalFileDescriptor() {}
  ~UDPSocketInterface() {}
  virtual bool Init() = 0;
  virtual bool Bind(const IPV4SocketAddress &endpoint) = 0;

  // Deprecated. Do not use in new code.
  bool Bind(const IPV4Address &ip, unsigned short port) {
    return Bind(IPV4SocketAddress(ip, port));
  }

  virtual bool GetSocketAddress(IPV4SocketAddress *address) const = 0;

  virtual bool Close() = 0;
  virtual ola::io::DescriptorHandle ReadDescriptor() const = 0;
  virtual ola::io::DescriptorHandle WriteDescriptor() const = 0;

  virtual ssize_t SendTo(const uint8_t *buffer,
                         unsigned int size,
                         const IPV4Address &ip,
                         unsigned short port) const = 0;
  virtual ssize_t SendTo(const uint8_t *buffer,
                         unsigned int size,
                         const IPV4SocketAddress &dest) const = 0;
  virtual ssize_t SendTo(ola::io::IOVecInterface *data,
                         const IPV4Address &ip,
                         unsigned short port) const = 0;
  virtual ssize_t SendTo(ola::io::IOVecInterface *data,
                         const IPV4SocketAddress &dest) const = 0;

  virtual bool RecvFrom(uint8_t *buffer, ssize_t *data_read) const = 0;
  virtual bool RecvFrom(uint8_t *buffer,
                        ssize_t *data_read,
                        IPV4Address &source) const = 0;  // NOLINT
  virtual bool RecvFrom(uint8_t *buffer,
                        ssize_t *data_read,
                        IPV4Address &source,  // NOLINT
                        uint16_t &port) const = 0;  // NOLINT

  virtual bool EnableBroadcast() = 0;
  virtual bool SetMulticastInterface(const IPV4Address &iface) = 0;
  virtual bool JoinMulticast(const IPV4Address &iface,
                             const IPV4Address &group,
                             bool loop = false) = 0;
  virtual bool LeaveMulticast(const IPV4Address &iface,
                              const IPV4Address &group) = 0;
  virtual bool SetTos(uint8_t tos) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(UDPSocketInterface);
};


/*
 * A UDPSocket (non connected)
 */
class UDPSocket: public UDPSocketInterface {
 public:
  UDPSocket()
      : UDPSocketInterface(),
        m_handle(ola::io::INVALID_DESCRIPTOR),
        m_bound_to_port(false) {}
  ~UDPSocket() { Close(); }
  bool Init();
  bool Bind(const IPV4SocketAddress &endpoint);

  bool GetSocketAddress(IPV4SocketAddress *address) const;

  bool Close();
  ola::io::DescriptorHandle ReadDescriptor() const { return m_handle; }
  ola::io::DescriptorHandle WriteDescriptor() const { return m_handle; }
  ssize_t SendTo(const uint8_t *buffer,
                 unsigned int size,
                 const IPV4Address &ip,
                 unsigned short port) const;
  ssize_t SendTo(const uint8_t *buffer,
                 unsigned int size,
                 const IPV4SocketAddress &dest) const {
    return SendTo(buffer, size, dest.Host(), dest.Port());
  }
  ssize_t SendTo(ola::io::IOVecInterface *data,
                 const IPV4Address &ip,
                 unsigned short port) const;
  ssize_t SendTo(ola::io::IOVecInterface *data,
                 const IPV4SocketAddress &dest) const {
    return SendTo(data, dest.Host(), dest.Port());
  }

  bool RecvFrom(uint8_t *buffer, ssize_t *data_read) const;
  bool RecvFrom(uint8_t *buffer,
                ssize_t *data_read,
                IPV4Address &source) const;  // NOLINT
  bool RecvFrom(uint8_t *buffer,
                ssize_t *data_read,
                IPV4Address &source,  // NOLINT
                uint16_t &port) const;  // NOLINT

  bool EnableBroadcast();
  bool SetMulticastInterface(const IPV4Address &iface);
  bool JoinMulticast(const IPV4Address &iface,
                     const IPV4Address &group,
                     bool loop = false);
  bool LeaveMulticast(const IPV4Address &iface,
                      const IPV4Address &group);

  bool SetTos(uint8_t tos);

 private:
  ola::io::DescriptorHandle m_handle;
  bool m_bound_to_port;

  DISALLOW_COPY_AND_ASSIGN(UDPSocket);
};
}  // namespace network
}  // namespace ola
#endif  // INCLUDE_OLA_NETWORK_SOCKET_H_