@@ -1667,7 +1667,7 @@ PHP_FUNCTION(socket_recvfrom)
16671667
16681668 zval obj ;
16691669 object_init_ex (& obj , socket_ethinfo_ce );
1670- array_init (& zpayload );
1670+ object_init (& zpayload );
16711671
16721672 switch (protocol ) {
16731673 case ETH_P_IP : {
@@ -1677,26 +1677,28 @@ PHP_FUNCTION(socket_recvfrom)
16771677 struct in_addr s , d ;
16781678 s .s_addr = ip -> saddr ;
16791679 d .s_addr = ip -> daddr ;
1680- add_assoc_string ( & zpayload , "ipsrc" , inet_ntoa (s ));
1681- add_assoc_string ( & zpayload , "ipdst" , inet_ntoa (d ));
1680+ zend_update_property_string ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "ipsrc" ) , inet_ntoa (s ));
1681+ zend_update_property_string ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "ipdst" ) , inet_ntoa (d ));
16821682
16831683 switch (ip -> protocol ) {
16841684 case IPPROTO_TCP : {
16851685 struct tcphdr * tcp = (struct tcphdr * )ipdata ;
1686- add_assoc_long ( & zpayload , "portsrc" , ntohs (tcp -> th_sport ));
1687- add_assoc_long ( & zpayload , "portdst" , ntohs (tcp -> th_dport ));
1686+ zend_update_property_long ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "portsrc" ) , ntohs (tcp -> th_sport ));
1687+ zend_update_property_long ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "portdst" ) , ntohs (tcp -> th_dport ));
16881688 break ;
16891689 }
16901690 case IPPROTO_UDP : {
16911691 struct udphdr * udp = (struct udphdr * )ipdata ;
1692- add_assoc_long ( & zpayload , "portsrc" , ntohs (udp -> uh_sport ));
1693- add_assoc_long ( & zpayload , "portdst" , ntohs (udp -> uh_dport ));
1692+ zend_update_property_long ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "portsrc" ) , ntohs (udp -> uh_sport ));
1693+ zend_update_property_long ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "portdst" ) , ntohs (udp -> uh_dport ));
16941694 break ;
16951695 }
16961696 default :
1697+ ZVAL_NULL (& zpayload );
1698+ zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
1699+ zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("rawpayload" ), ZSTR_VAL (recv_buf ));
1700+ Z_DELREF (zpayload );
16971701 zend_string_efree (recv_buf );
1698- zval_ptr_dtor (& zpayload );
1699- zval_ptr_dtor (& obj );
17001702 zend_value_error ("unsupported ip header protocol" );
17011703 RETURN_THROWS ();
17021704 }
@@ -1708,31 +1710,34 @@ PHP_FUNCTION(socket_recvfrom)
17081710 char s [INET6_ADDRSTRLEN ], d [INET6_ADDRSTRLEN ];
17091711 inet_ntop (AF_INET6 , & ip -> saddr , s , sizeof (s ));
17101712 inet_ntop (AF_INET6 , & ip -> daddr , d , sizeof (d ));
1711- add_assoc_string ( & zpayload , "ipsrc" , s );
1712- add_assoc_string ( & zpayload , "ipdst" , d );
1713+ zend_update_property_string ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "ipsrc" ) , s );
1714+ zend_update_property_string ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "ipdst" ) , d );
17131715 break ;
17141716 }
17151717 case ETH_P_LOOP : {
17161718 struct ethhdr * innere = (struct ethhdr * )((unsigned char * )e + ETH_HLEN );
1717- add_assoc_string ( & zpayload , "macsrc" , ether_ntoa ((struct ether_addr * )innere -> h_source ));
1718- add_assoc_string ( & zpayload , "macdst" , ether_ntoa ((struct ether_addr * )innere -> h_dest ));
1719+ zend_update_property_string ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "macsrc" ) , ether_ntoa ((struct ether_addr * )innere -> h_source ));
1720+ zend_update_property_string ( Z_OBJCE ( zpayload ), Z_OBJ ( zpayload ), ZEND_STRL ( "macdst" ) , ether_ntoa ((struct ether_addr * )innere -> h_dest ));
17191721 break ;
17201722 }
17211723 default :
1724+ ZVAL_NULL (& zpayload );
1725+ zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
1726+ zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("rawpayload" ), ZSTR_VAL (recv_buf ));
1727+ Z_DELREF (zpayload );
17221728 zend_string_efree (recv_buf );
1723- zval_ptr_dtor (& zpayload );
1724- zval_ptr_dtor (& obj );
17251729 zend_value_error ("unsupported ethernet protocol" );
17261730 RETURN_THROWS ();
17271731 }
17281732
1729- Z_DELREF (zpayload );
1730- zend_string_efree (recv_buf );
17311733 zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("socket" ), arg1 );
17321734 zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("macsrc" ), ether_ntoa ((struct ether_addr * )e -> h_source ));
17331735 zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("macdst" ), ether_ntoa ((struct ether_addr * )e -> h_dest ));
17341736 zend_update_property_long (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("ethprotocol" ), protocol );
17351737 zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
1738+ zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("rawpayload" ), ZSTR_VAL (recv_buf ));
1739+ Z_DELREF (zpayload );
1740+ zend_string_efree (recv_buf );
17361741
17371742 ZEND_TRY_ASSIGN_REF_VALUE (arg2 , & obj );
17381743 ZEND_TRY_ASSIGN_REF_STRING (arg5 , ifrname );
0 commit comments