@@ -707,8 +707,12 @@ void
707
707
pqTraceOutputNoTypeByteMessage (PGconn * conn , const char * message )
708
708
{
709
709
int length ;
710
+ int version ;
711
+ bool regress ;
710
712
int logCursor = 0 ;
711
713
714
+ regress = (conn -> traceFlags & PQTRACE_REGRESS_MODE ) != 0 ;
715
+
712
716
if ((conn -> traceFlags & PQTRACE_SUPPRESS_TIMESTAMPS ) == 0 )
713
717
{
714
718
char timestr [128 ];
@@ -723,19 +727,46 @@ pqTraceOutputNoTypeByteMessage(PGconn *conn, const char *message)
723
727
724
728
fprintf (conn -> Pfdebug , "F\t%d\t" , length );
725
729
726
- switch (length )
730
+ if (length < 8 )
727
731
{
728
- case 16 : /* CancelRequest */
729
- fprintf (conn -> Pfdebug , "CancelRequest\t" );
730
- pqTraceOutputInt32 (conn -> Pfdebug , message , & logCursor , false);
731
- pqTraceOutputInt32 (conn -> Pfdebug , message , & logCursor , false);
732
- pqTraceOutputInt32 (conn -> Pfdebug , message , & logCursor , false);
733
- break ;
734
- case 8 : /* GSSENCRequest or SSLRequest */
735
- /* These messages do not reach here. */
736
- default :
737
- fprintf (conn -> Pfdebug , "Unknown message: length is %d" , length );
738
- break ;
732
+ fprintf (conn -> Pfdebug , "Unknown message\n" );
733
+ return ;
734
+ }
735
+
736
+ memcpy (& version , message + logCursor , 4 );
737
+ version = (int ) pg_ntoh32 (version );
738
+
739
+ if (version == CANCEL_REQUEST_CODE && length >= 16 )
740
+ {
741
+ fprintf (conn -> Pfdebug , "CancelRequest\t" );
742
+ pqTraceOutputInt16 (conn -> Pfdebug , message , & logCursor );
743
+ pqTraceOutputInt16 (conn -> Pfdebug , message , & logCursor );
744
+ pqTraceOutputInt32 (conn -> Pfdebug , message , & logCursor , regress );
745
+ pqTraceOutputInt32 (conn -> Pfdebug , message , & logCursor , regress );
746
+ }
747
+ else if (version == NEGOTIATE_SSL_CODE )
748
+ {
749
+ fprintf (conn -> Pfdebug , "SSLRequest\t" );
750
+ pqTraceOutputInt16 (conn -> Pfdebug , message , & logCursor );
751
+ pqTraceOutputInt16 (conn -> Pfdebug , message , & logCursor );
752
+ }
753
+ else if (version == NEGOTIATE_GSS_CODE )
754
+ {
755
+ fprintf (conn -> Pfdebug , "GSSENCRequest\t" );
756
+ pqTraceOutputInt16 (conn -> Pfdebug , message , & logCursor );
757
+ pqTraceOutputInt16 (conn -> Pfdebug , message , & logCursor );
758
+ }
759
+ else
760
+ {
761
+ fprintf (conn -> Pfdebug , "StartupMessage\t" );
762
+ pqTraceOutputInt16 (conn -> Pfdebug , message , & logCursor );
763
+ pqTraceOutputInt16 (conn -> Pfdebug , message , & logCursor );
764
+ while (message [logCursor ] != '\0' )
765
+ {
766
+ /* XXX should we suppress anything in regress mode? */
767
+ pqTraceOutputString (conn -> Pfdebug , message , & logCursor , false);
768
+ pqTraceOutputString (conn -> Pfdebug , message , & logCursor , false);
769
+ }
739
770
}
740
771
741
772
fputc ('\n' , conn -> Pfdebug );
0 commit comments