@@ -1667,7 +1667,7 @@ PHP_FUNCTION(socket_recvfrom)
1667
1667
1668
1668
zval obj ;
1669
1669
object_init_ex (& obj , socket_ethinfo_ce );
1670
- array_init (& zpayload );
1670
+ object_init (& zpayload );
1671
1671
1672
1672
switch (protocol ) {
1673
1673
case ETH_P_IP : {
@@ -1677,26 +1677,28 @@ PHP_FUNCTION(socket_recvfrom)
1677
1677
struct in_addr s , d ;
1678
1678
s .s_addr = ip -> saddr ;
1679
1679
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 ));
1682
1682
1683
1683
switch (ip -> protocol ) {
1684
1684
case IPPROTO_TCP : {
1685
1685
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 ));
1688
1688
break ;
1689
1689
}
1690
1690
case IPPROTO_UDP : {
1691
1691
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 ));
1694
1694
break ;
1695
1695
}
1696
1696
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 );
1697
1701
zend_string_efree (recv_buf );
1698
- zval_ptr_dtor (& zpayload );
1699
- zval_ptr_dtor (& obj );
1700
1702
zend_value_error ("unsupported ip header protocol" );
1701
1703
RETURN_THROWS ();
1702
1704
}
@@ -1708,31 +1710,34 @@ PHP_FUNCTION(socket_recvfrom)
1708
1710
char s [INET6_ADDRSTRLEN ], d [INET6_ADDRSTRLEN ];
1709
1711
inet_ntop (AF_INET6 , & ip -> saddr , s , sizeof (s ));
1710
1712
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 );
1713
1715
break ;
1714
1716
}
1715
1717
case ETH_P_LOOP : {
1716
1718
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 ));
1719
1721
break ;
1720
1722
}
1721
1723
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 );
1722
1728
zend_string_efree (recv_buf );
1723
- zval_ptr_dtor (& zpayload );
1724
- zval_ptr_dtor (& obj );
1725
1729
zend_value_error ("unsupported ethernet protocol" );
1726
1730
RETURN_THROWS ();
1727
1731
}
1728
1732
1729
- Z_DELREF (zpayload );
1730
- zend_string_efree (recv_buf );
1731
1733
zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("socket" ), arg1 );
1732
1734
zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("macsrc" ), ether_ntoa ((struct ether_addr * )e -> h_source ));
1733
1735
zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("macdst" ), ether_ntoa ((struct ether_addr * )e -> h_dest ));
1734
1736
zend_update_property_long (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("ethprotocol" ), protocol );
1735
1737
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 );
1736
1741
1737
1742
ZEND_TRY_ASSIGN_REF_VALUE (arg2 , & obj );
1738
1743
ZEND_TRY_ASSIGN_REF_STRING (arg5 , ifrname );
0 commit comments