@@ -3618,6 +3618,71 @@ static int pv_get_xlog_level(struct sip_msg *msg, pv_param_t *param, pv_value_t
3618
3618
return 0 ;
3619
3619
}
3620
3620
3621
+ static int pv_get_sip2json (struct sip_msg * msg , pv_param_t * param ,
3622
+ pv_value_t * res )
3623
+ {
3624
+ cJSON * ret , * aux , * aux2 , * arr ;
3625
+ struct hdr_field * it ;
3626
+ char hdr_name_buf [255 ];
3627
+ str json_ret ;
3628
+
3629
+ if (msg == NULL )
3630
+ return -1 ;
3631
+
3632
+ if (parse_headers (msg , HDR_EOH_F , 0 ) < 0 )
3633
+ return pv_get_null (msg , param , res );
3634
+
3635
+ ret = cJSON_CreateObject ();
3636
+
3637
+ /* first line */
3638
+ aux = cJSON_CreateStr (msg -> buf ,msg -> first_line .len );
3639
+ if (!aux ) {
3640
+ return pv_get_null (msg , param , res );
3641
+ }
3642
+ cJSON_AddItemToObject (ret ,"first_line" ,aux );
3643
+
3644
+ /* headers */
3645
+ aux = cJSON_CreateObject ();
3646
+ for (it = msg -> headers ;it ;it = it -> next ) {
3647
+ memcpy (hdr_name_buf ,it -> name .s ,it -> name .len );
3648
+ hdr_name_buf [it -> name .len ] = 0 ;
3649
+
3650
+ arr = cJSON_GetObjectItem (aux , hdr_name_buf );
3651
+ if (!arr ) {
3652
+ arr = cJSON_CreateArray ();
3653
+ cJSON_AddItemToObject (aux ,hdr_name_buf ,arr );
3654
+ }
3655
+
3656
+ aux2 = cJSON_CreateStr (it -> body .s ,it -> body .len );
3657
+ if (!aux2 ) {
3658
+ return pv_get_null (msg , param , res );
3659
+ }
3660
+
3661
+ cJSON_AddItemToArray (arr ,aux2 );
3662
+ }
3663
+ cJSON_AddItemToObject (ret ,"headers" ,aux );
3664
+
3665
+ /* body */
3666
+ if (msg -> body ) {
3667
+ aux = cJSON_CreateStr (msg -> body -> body .s ,msg -> body -> body .len );
3668
+ if (!aux ) {
3669
+ return pv_get_null (msg , param , res );
3670
+ }
3671
+ cJSON_AddItemToObject (ret ,"body" ,aux );
3672
+ }
3673
+
3674
+ json_ret .s = cJSON_Print (ret );
3675
+ if (!json_ret .s ) {
3676
+ return pv_get_null (msg , param , res );
3677
+ }
3678
+ cJSON_Minify (json_ret .s );
3679
+ json_ret .len = strlen (json_ret .s );
3680
+
3681
+ cJSON_Delete (ret );
3682
+ return pv_get_strval (msg , param , res , & json_ret );
3683
+ }
3684
+
3685
+
3621
3686
/************** Boolean consts *****************/
3622
3687
3623
3688
static const pv_value_t pv_true = {
@@ -4201,6 +4266,9 @@ const pv_export_t _pv_names_table[] = {
4201
4266
0 , 0 , 0 , 0 },
4202
4267
{str_const_init ("xlog_level" ), PVT_XLOG_LEVEL , pv_get_xlog_level ,
4203
4268
pv_set_xlog_level , 0 , 0 , 0 , 0 },
4269
+ {{"sip2json" , (sizeof ("sip2json" )- 1 )}, /* */
4270
+ PVT_SIP2JSON , pv_get_sip2json , 0 ,
4271
+ 0 , 0 , 0 , 0 },
4204
4272
{{0 ,0 }, 0 , 0 , 0 , 0 , 0 , 0 , 0 }
4205
4273
};
4206
4274
0 commit comments