Add TCP socket prompt feature.
authorMikhail Kurinnoi <m.kurinnoi@samsung.com>
Tue, 5 Feb 2019 10:58:54 +0000 (13:58 +0300)
committerAlexander Soldatov/AI Ecosystem Lab /SRR/Staff Engineer/삼성전자 <soldatov.a@samsung.com>
Tue, 5 Feb 2019 15:01:03 +0000 (18:01 +0300)
Provide custom socket prompt string in order to check
send/receive capability of established connection.
Required by VS plugin.

src/track/libheaptrack.cpp
src/track/outstream/outstream.h
src/track/outstream/outstream_file.cpp
src/track/outstream/outstream_file.h
src/track/outstream/outstream_socket.cpp
src/track/outstream/outstream_socket.h

index f93acfba06500c16110a4ef588000c3a5f8e652e..03cd85cc7707547aa4d03721f6c27025db48aa7e 100644 (file)
@@ -164,8 +164,20 @@ outStream* createFile(const char* fileName)
             }
             unsetenv("DUMP_HEAPTRACK_SOCKET");
         }
-        debugLog<VerboseOutput>("%s", "will write to socket");
-        return OpenStream<outStreamSOCKET, uint16_t>(Port);
+
+        outStream *tmpStream = OpenStream<outStreamSOCKET, uint16_t>(Port);
+
+        env = getenv("DUMP_HEAPTRACK_SOCKET_PROMPT");
+        if (env) {
+            if (fprintf(tmpStream, "%s\n", env) < 0
+                || !tmpStream->Flush()) {
+                fprintf(stderr, "WARNING: can't send socket prompt \"%s\".\n", env);
+            }
+            unsetenv("DUMP_HEAPTRACK_SOCKET_PROMPT");
+        }
+
+        debugLog<VerboseOutput>("will write to socket/%p\n", tmpStream);
+        return tmpStream;
     }
 
     if (outputFileName.empty()) {
index 0d3084de9278f79bf3214386cba53c8ad97a8e2c..e927af49bf250c612e67c7881ab5a09dd9f18909 100644 (file)
@@ -18,6 +18,7 @@ public:
 
     virtual int Putc(int Char) noexcept = 0;
     virtual int Puts(const char *String) noexcept = 0;
+    virtual bool Flush() noexcept = 0;
 };
 
 template <class Implementation, class Initialization>
index 54ab758c1d7e8280b445dbd38783c0d40e875209..855b9795e03b815c5dd982a26d8a7cb81c283040 100644 (file)
@@ -58,3 +58,12 @@ int outStreamFILE::Puts(const char *String) noexcept
     }\r
     return fputs(String, Stream_);\r
 }\r
+\r
+bool outStreamFILE::Flush() noexcept\r
+{\r
+    if (!Stream_) {\r
+        errno = EIO;\r
+        return false;\r
+    }\r
+    return fflush(Stream_) != EOF;\r
+}\r
index b4167d265c3aad562187d481c940630bca50a779..0b0d9f920805958dc30eb4b25f4faa476c7a37c6 100644 (file)
@@ -31,6 +31,7 @@ public:
 
     int Putc(int Char) noexcept override;
     int Puts(const char *String) noexcept override;
+    bool Flush() noexcept override;
 
 private:
     FILE *Stream_;
index 2311cbead0c1b5fdca1e1e42ea14120dde93c76a..65cd252319d6829add4b5a4efbd8447d4b6a6c40 100644 (file)
@@ -163,3 +163,12 @@ int outStreamSOCKET::Puts(const char *String) noexcept
 \r
     return EOF;\r
 }\r
+\r
+bool outStreamSOCKET::Flush() noexcept\r
+{\r
+    if (Socket_ == -1) {\r
+        errno = EIO;\r
+        return false;\r
+    }\r
+    return FlushBuffer();\r
+}\r
index c02de543004f1d6e13ccb61a470ab362b4ee00a5..910ca038f61d3d70e15aabb50dee3bb31ed8016b 100644 (file)
@@ -34,6 +34,7 @@ public:
 
     int Putc(int Char) noexcept override;
     int Puts(const char *String) noexcept override;
+    bool Flush() noexcept override;
 
     static constexpr int MinAllowedSocketPort = 1;
     static constexpr int MaxAllowedSocketPort = 65535;