Hi clayborg,

This function returns a URI of the resource that the connection is connected 
to.  This is especially important for connections established by accepting a 
connection from a remote host.

Also added implementations for ConnectionMachPort, ConnectionSharedMemory, 
Also fixed up some documentation in Connection::Write
Renamed ConnectionFileDescriptorPosix::SocketListen to 
ConnectionFileDescriptorPosix::SocketListenAndAccept
Fixed a log message in Socket.cpp

REPOSITORY
  rL LLVM

http://reviews.llvm.org/D7026

Files:
  include/lldb/Core/Connection.h
  include/lldb/Core/ConnectionMachPort.h
  include/lldb/Core/ConnectionSharedMemory.h
  include/lldb/Host/posix/ConnectionFileDescriptorPosix.h
  include/lldb/Host/windows/ConnectionGenericFileWindows.h
  source/Core/ConnectionMachPort.cpp
  source/Core/ConnectionSharedMemory.cpp
  source/Host/common/Socket.cpp
  source/Host/posix/ConnectionFileDescriptorPosix.cpp
  source/Host/windows/ConnectionGenericFileWindows.cpp

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: include/lldb/Core/Connection.h
===================================================================
--- include/lldb/Core/Connection.h
+++ include/lldb/Core/Connection.h
@@ -133,13 +133,13 @@
     ///
     /// Subclasses must override this function.
     ///
-    /// @param[in] src
-    ///     A source buffer that must be at least \a src_len bytes
+    /// @param[in] dst
+    ///     A desination buffer that must be at least \a dst_len bytes
     ///     long.
     ///
-    /// @param[in] src_len
+    /// @param[in] dst_len
     ///     The number of bytes to attempt to write, and also the
-    ///     number of bytes are currently available in \a src.
+    ///     number of bytes are currently available in \a dst.
     ///
     /// @param[out] error_ptr
     ///     A pointer to an error object that should be given an
@@ -150,8 +150,19 @@
     ///     The number of bytes actually Written.
     //------------------------------------------------------------------
     virtual size_t
-    Write (const void *buffer, size_t length, lldb::ConnectionStatus &status, Error *error_ptr) = 0;
+    Write (const void *dst, size_t dst_len, lldb::ConnectionStatus &status, Error *error_ptr) = 0;
 
+    //------------------------------------------------------------------
+    /// Returns a URI that describes this connection object
+    ///
+    /// Subclasses may override this function.
+    ///
+    /// @return
+    ///     Returns URI or an empty string if disconnecteds
+    //------------------------------------------------------------------
+    virtual std::string
+    GetURI() = 0;
+
 private:
     //------------------------------------------------------------------
     // For Connection only
Index: include/lldb/Core/ConnectionMachPort.h
===================================================================
--- include/lldb/Core/ConnectionMachPort.h
+++ include/lldb/Core/ConnectionMachPort.h
@@ -56,6 +56,9 @@
            lldb::ConnectionStatus &status, 
            lldb_private::Error *error_ptr);
 
+    virtual std::string
+    GetURI();
+
     lldb::ConnectionStatus
     BootstrapCheckIn (const char *port_name, 
                       lldb_private::Error *error_ptr);
@@ -83,6 +86,7 @@
     mach_port_t m_port;
 
 private:
+    std::string m_uri;
     
 
     DISALLOW_COPY_AND_ASSIGN (ConnectionMachPort);
Index: include/lldb/Core/ConnectionSharedMemory.h
===================================================================
--- include/lldb/Core/ConnectionSharedMemory.h
+++ include/lldb/Core/ConnectionSharedMemory.h
@@ -53,6 +53,9 @@
     virtual size_t
     Write (const void *src, size_t src_len, lldb::ConnectionStatus &status, Error *error_ptr);
 
+    virtual std::string
+    GetURI();
+
     lldb::ConnectionStatus
     Open (bool create, const char *name, size_t size, Error *error_ptr);
 
Index: include/lldb/Host/posix/ConnectionFileDescriptorPosix.h
===================================================================
--- include/lldb/Host/posix/ConnectionFileDescriptorPosix.h
+++ include/lldb/Host/posix/ConnectionFileDescriptorPosix.h
@@ -50,6 +50,8 @@
 
     virtual size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status, Error *error_ptr);
 
+    virtual std::string GetURI();
+
     lldb::ConnectionStatus BytesAvailable(uint32_t timeout_usec, Error *error_ptr);
 
     bool InterruptRead();
@@ -75,7 +77,7 @@
 
     void CloseCommandPipe();
 
-    lldb::ConnectionStatus SocketListen(const char *host_and_port, Error *error_ptr);
+    lldb::ConnectionStatus SocketListenAndAccept(const char *host_and_port, Error *error_ptr);
 
     lldb::ConnectionStatus ConnectTCP(const char *host_and_port, Error *error_ptr);
 
@@ -99,6 +101,8 @@
     bool m_waiting_for_accept;
     bool m_child_processes_inherit;
 
+    std::string m_uri;
+
   private:
     DISALLOW_COPY_AND_ASSIGN(ConnectionFileDescriptor);
 };
Index: include/lldb/Host/windows/ConnectionGenericFileWindows.h
===================================================================
--- include/lldb/Host/windows/ConnectionGenericFileWindows.h
+++ include/lldb/Host/windows/ConnectionGenericFileWindows.h
@@ -38,6 +38,8 @@
 
     virtual size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status, Error *error_ptr);
 
+    virtual std::string GetURI();
+
     bool InterruptRead();
 
   protected:
@@ -57,6 +59,8 @@
     void InitializeEventHandles();
     void IncrementFilePointer(DWORD amount);
 
+    std::string m_uri;
+
     DISALLOW_COPY_AND_ASSIGN(ConnectionGenericFile);
 };
 }
Index: source/Core/ConnectionMachPort.cpp
===================================================================
--- source/Core/ConnectionMachPort.cpp
+++ source/Core/ConnectionMachPort.cpp
@@ -107,6 +107,7 @@
     {
         if (error_ptr)
             error_ptr->Clear();
+        m_uri.assign(s);
     }
     else
     {
@@ -209,6 +210,7 @@
             error_ptr->SetError (kret, eErrorTypeMachKernel);
         m_port = MACH_PORT_TYPE_NONE;
     }
+    m_uri.clear();
 
     return eConnectionStatusSuccess;
 }
@@ -256,6 +258,12 @@
     return 0;
 }
 
+std::string
+ConnectionMachPort::GetURI()
+{
+    return m_uri;
+}
+
 ConnectionStatus
 ConnectionMachPort::BytesAvailable (uint32_t timeout_usec, Error *error_ptr)
 {
Index: source/Core/ConnectionSharedMemory.cpp
===================================================================
--- source/Core/ConnectionSharedMemory.cpp
+++ source/Core/ConnectionSharedMemory.cpp
@@ -107,6 +107,13 @@
     return 0;
 }
 
+std::string
+ConnectionSharedMemory::GetURI()
+{
+    // TODO: fix when Connect is fixed?
+    return "";
+}
+
 ConnectionStatus
 ConnectionSharedMemory::BytesAvailable (uint32_t timeout_usec, Error *error_ptr)
 {
Index: source/Host/posix/ConnectionFileDescriptorPosix.cpp
===================================================================
--- source/Host/posix/ConnectionFileDescriptorPosix.cpp
+++ source/Host/posix/ConnectionFileDescriptorPosix.cpp
@@ -143,7 +143,7 @@
         if (strstr(s, "listen://") == s)
         {
             // listen://HOST:PORT
-            return SocketListen(s + strlen("listen://"), error_ptr);
+            return SocketListenAndAccept(s + strlen("listen://"), error_ptr);
         }
         else if (strstr(s, "accept://") == s)
         {
@@ -220,6 +220,7 @@
                         m_read_sp.reset(new File(fd, false));
                         m_write_sp.reset(new File(fd, false));
                     }
+                    m_uri.assign(s);
                     return eConnectionStatusSuccess;
                 }
             }
@@ -352,6 +353,7 @@
     if (error_ptr)
         *error_ptr = error.Fail() ? error : error2;
 
+    m_uri.clear();
     m_shutting_down = false;
     return status;
 }
@@ -511,6 +513,12 @@
     return bytes_sent;
 }
 
+std::string
+ConnectionFileDescriptor::GetURI()
+{
+    return m_uri;
+}
+
 // This ConnectionFileDescriptor::BytesAvailable() uses select().
 //
 // PROS:
@@ -701,7 +709,12 @@
         *error_ptr = error;
     m_write_sp.reset(socket);
     m_read_sp = m_write_sp;
-    return (error.Success()) ? eConnectionStatusSuccess : eConnectionStatusError;
+    if (error.Fail())
+    {
+        return eConnectionStatusError;
+    }
+    m_uri.assign(socket_name);
+    return eConnectionStatusSuccess;
 }
 
 ConnectionStatus
@@ -713,11 +726,16 @@
         *error_ptr = error;
     m_write_sp.reset(socket);
     m_read_sp = m_write_sp;
-    return (error.Success()) ? eConnectionStatusSuccess : eConnectionStatusError;
+    if (error.Fail())
+    {
+        return eConnectionStatusError;
+    }
+    m_uri.assign(socket_name);
+    return eConnectionStatusSuccess;
 }
 
 ConnectionStatus
-ConnectionFileDescriptor::SocketListen(const char *s, Error *error_ptr)
+ConnectionFileDescriptor::SocketListenAndAccept(const char *s, Error *error_ptr)
 {
     m_port_predicate.SetValue(0, eBroadcastNever);
 
@@ -742,7 +760,14 @@
 
     m_write_sp.reset(socket);
     m_read_sp = m_write_sp;
-    return (error.Success()) ? eConnectionStatusSuccess : eConnectionStatusError;
+    if (error.Fail())
+    {
+        return eConnectionStatusError;
+    }
+    char uri[280]; // sizeof(uri) > strlen("connect://") + 255 + strlen(1) + strlen("65535") + 1
+    snprintf(uri, sizeof(uri), "connect://%s:%u",socket->GetRemoteIPAddress().c_str(), socket->GetRemotePortNumber());
+    m_uri.assign(uri);
+    return eConnectionStatusSuccess;
 }
 
 ConnectionStatus
@@ -754,7 +779,12 @@
         *error_ptr = error;
     m_write_sp.reset(socket);
     m_read_sp = m_write_sp;
-    return (error.Success()) ? eConnectionStatusSuccess : eConnectionStatusError;
+    if (error.Fail())
+    {
+        return eConnectionStatusError;
+    }
+    m_uri.assign(s);
+    return eConnectionStatusSuccess;
 }
 
 ConnectionStatus
@@ -767,7 +797,12 @@
         *error_ptr = error;
     m_write_sp.reset(send_socket);
     m_read_sp.reset(recv_socket);
-    return (error.Success()) ? eConnectionStatusSuccess : eConnectionStatusError;
+    if (error.Fail())
+    {
+        return eConnectionStatusError;
+    }
+    m_uri.assign(s);
+    return eConnectionStatusSuccess;
 }
 
 uint16_t
Index: source/Host/common/Socket.cpp
===================================================================
--- source/Host/common/Socket.cpp
+++ source/Host/common/Socket.cpp
@@ -190,7 +190,7 @@
 
     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_CONNECTION));
     if (log)
-        log->Printf ("ConnectionFileDescriptor::SocketListen (%s)", host_and_port.data());
+        log->Printf ("Socket::TcpListen (%s)", host_and_port.data());
 
     std::string host_str;
     std::string port_str;
Index: source/Host/windows/ConnectionGenericFileWindows.cpp
===================================================================
--- source/Host/windows/ConnectionGenericFileWindows.cpp
+++ source/Host/windows/ConnectionGenericFileWindows.cpp
@@ -147,6 +147,7 @@
     }
 
     m_owns_file = true;
+    m_uri.assign(s);
     return eConnectionStatusSuccess;
 }
 
@@ -175,6 +176,7 @@
 
     ::ZeroMemory(&m_file_position, sizeof(m_file_position));
     m_owns_file = false;
+    m_uri.clear();
     return eConnectionStatusSuccess;
 }
 
@@ -328,6 +330,12 @@
     return return_info.GetBytes();
 }
 
+std::string
+ConnectionGenericFile::GetURI()
+{
+    return m_uri;
+}
+
 bool
 ConnectionGenericFile::InterruptRead()
 {
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to