@@ -21,6 +21,8 @@ int process_do_msdp ( DESCRIPTOR_DATA *d, unsigned char *src, i
2121int process_sb_msdp ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen );
2222int process_do_gmcp ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen );
2323int process_sb_gmcp ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen );
24+ int process_do_mxp ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen );
25+ int process_dont_mxp ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen );
2426int process_do_mccp2 ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen );
2527int process_dont_mccp2 ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen );
2628int skip_sb ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen );
@@ -67,6 +69,9 @@ const struct telopt_type telopt_table [] =
6769 { 3 , (unsigned char []) { IAC , DO , TELOPT_GMCP , 0 }, & process_do_gmcp },
6870 { 3 , (unsigned char []) { IAC , SB , TELOPT_GMCP , 0 }, & process_sb_gmcp },
6971
72+ { 3 , (unsigned char []) { IAC , DO , TELOPT_MXP , 0 }, & process_do_mxp },
73+ { 3 , (unsigned char []) { IAC , DONT , TELOPT_MXP , 0 }, & process_dont_mxp },
74+
7075 { 3 , (unsigned char []) { IAC , DO , TELOPT_MCCP2 , 0 }, & process_do_mccp2 },
7176 { 3 , (unsigned char []) { IAC , DONT , TELOPT_MCCP2 , 0 }, & process_dont_mccp2 },
7277
@@ -863,6 +868,32 @@ int process_sb_msdp( DESCRIPTOR_DATA *d, unsigned char *src, int srclen )
863868 return i + 1 ;
864869}
865870
871+ // MXP
872+
873+ int process_do_mxp ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen )
874+ {
875+ if (HAS_BIT (d -> mth -> comm_flags , COMM_FLAG_MXP ))
876+ {
877+ return 3 ;
878+ }
879+
880+ SET_BIT (d -> mth -> comm_flags , COMM_FLAG_MXP );
881+
882+ /* ESC[7z — Lock Locked: make "locked" the persistent default line mode, so
883+ normal output is never parsed as MXP markup. Links opt back in per-span. */
884+ descriptor_printf (d , "\033[7z" );
885+ log_descriptor_printf (d , "INFO MXP ENABLED" );
886+
887+ return 3 ;
888+ }
889+
890+ int process_dont_mxp ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen )
891+ {
892+ DEL_BIT (d -> mth -> comm_flags , COMM_FLAG_MXP );
893+
894+ return 3 ;
895+ }
896+
866897// MSDP over GMCP
867898
868899int process_do_gmcp ( DESCRIPTOR_DATA * d , unsigned char * src , int srclen )
0 commit comments