Changeset 1027:0117a7746b21 in freeDiameter for extensions/app_diameap/diameap_server.c
- Timestamp:
- Apr 15, 2013, 4:17:07 PM (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/app_diameap/diameap_server.c
r639 r1027 342 342 343 343 static int diameap_parse_eap_resp(struct eap_state_machine * eap_sm, 344 struct eap_packet eappacket)344 struct eap_packet *eappacket) 345 345 { 346 346 TRACE_ENTRY("%p %p",eap_sm, eappacket) … … 352 352 eap_sm->respVendorMethod = TYPE_NONE; 353 353 354 if (eappacket .data == NULL)354 if (eappacket->data == NULL) 355 355 { 356 356 TRACE_DEBUG(INFO,"%s Empty EAP packet",DIAMEAP_EXTENSION); … … 414 414 if (eap_sm->respMethod == TYPE_EXPANDED_TYPES) 415 415 { 416 u8 *data = (u8 *) eappacket .data;416 u8 *data = (u8 *) eappacket->data; 417 417 //int len = 0; 418 418 //u32 respVendor, respVendorMethod; … … 455 455 eappacket->ulength = (u16) avpdata->avp_value->os.len; 456 456 eappacket->data = (u8 *) avpdata->avp_value->os.data; 457 diameap_eap_get_packetlength( *eappacket, &eappacket->length);457 diameap_eap_get_packetlength(eappacket, &eappacket->length); 458 458 return 0; 459 459 } … … 477 477 eap_i->aaaEapResp = TRUE; 478 478 u16 length; 479 diameap_eap_get_length( eap_i->aaaEapRespData, &length);479 diameap_eap_get_length(&eap_i->aaaEapRespData, &length); 480 480 if (length >= 4) 481 481 { 482 482 eap_code code; 483 CHECK_FCT(diameap_eap_get_code( eap_i->aaaEapRespData,&code));483 CHECK_FCT(diameap_eap_get_code(&eap_i->aaaEapRespData,&code)); 484 484 485 485 if (code != EAP_RESPONSE) … … 498 498 else 499 499 { 500 CHECK_FCT(diameap_parse_eap_resp(&diameap_sm->eap_sm, eap_i->aaaEapRespData));500 CHECK_FCT(diameap_parse_eap_resp(&diameap_sm->eap_sm, &eap_i->aaaEapRespData)); 501 501 if (diameap_sm->eap_sm.rxResp == FALSE) 502 502 { … … 1255 1255 int *ret) 1256 1256 { 1257 TRACE_ENTRY("%p %p %p % p %p", avp_attributes, attribute, avp_attrib, ret);1257 TRACE_ENTRY("%p %p %p %d %p", avp_attributes, attribute, avp_attrib, unlink, ret); 1258 1258 if (avp_attributes == NULL) 1259 1259 { … … 1289 1289 { 1290 1290 1291 TRACE_ENTRY("%p %p %p % p %p", auth_attributes, attribute, auth_attrib, ret);1291 TRACE_ENTRY("%p %p %p %d %p", auth_attributes, attribute, auth_attrib, unlink, ret); 1292 1292 1293 1293 if (auth_attributes == NULL) … … 1325 1325 int *ret) 1326 1326 { 1327 TRACE_ENTRY("%p %p %p % p %p", ans_attributes, attribute, ans_attrib, ret);1327 TRACE_ENTRY("%p %p %p %d %p", ans_attributes, attribute, ans_attrib, unlink, ret); 1328 1328 if (ans_attributes == NULL) 1329 1329 { … … 1638 1638 boolean is_operator(int format_type, char * operator) 1639 1639 { 1640 TRACE_ENTRY("% p%p",format_type,operator);1640 TRACE_ENTRY("%d %p",format_type,operator); 1641 1641 if ((format_type == DIAMEAP_STR) && (strcmp(operator, "==") == 0 || strcmp( 1642 1642 operator, "~=") == 0 || strcmp(operator, "!=") == 0)) … … 1653 1653 union avp_value diameap_get_num(char * num, enum dict_avp_basetype datatype) 1654 1654 { 1655 TRACE_ENTRY("%p % p",num,datatype);1655 TRACE_ENTRY("%p %d",num,datatype); 1656 1656 union avp_value val; 1657 1657 switch (datatype) … … 1682 1682 } 1683 1683 1684 boolean diameap_check(union avp_value A, char * B, char * operator,1684 boolean diameap_check(union avp_value *A, char * B, char * operator, 1685 1685 enum dict_avp_basetype datatype) 1686 1686 { 1687 TRACE_ENTRY("%p %p %p % p",A,B,operator,datatype);1687 TRACE_ENTRY("%p %p %p %d",A,B,operator,datatype); 1688 1688 if (((datatype == AVP_TYPE_OCTETSTRING) && (is_operator(DIAMEAP_STR, 1689 1689 operator) == TRUE)) || ((datatype != AVP_TYPE_OCTETSTRING) … … 1697 1697 operator) == TRUE)) 1698 1698 { 1699 if (strcmp((char *)A .os.data, B) == 0)1699 if (strcmp((char *)A->os.data, B) == 0) 1700 1700 return TRUE; 1701 1701 else … … 1710 1710 { 1711 1711 case AVP_TYPE_INTEGER32://i32 1712 return EQ(A .i32,diameap_get_num(B, datatype).i32);1712 return EQ(A->i32,diameap_get_num(B, datatype).i32); 1713 1713 break; 1714 1714 case AVP_TYPE_INTEGER64://i64 1715 return EQ(A .i64,diameap_get_num(B, datatype).i64);1715 return EQ(A->i64,diameap_get_num(B, datatype).i64); 1716 1716 break; 1717 1717 case AVP_TYPE_UNSIGNED32://u32 1718 return EQ(A .u32,diameap_get_num(B, datatype).u32);1718 return EQ(A->u32,diameap_get_num(B, datatype).u32); 1719 1719 break; 1720 1720 case AVP_TYPE_UNSIGNED64://u64 1721 return EQ(A .u64,diameap_get_num(B, datatype).u64);1721 return EQ(A->u64,diameap_get_num(B, datatype).u64); 1722 1722 break; 1723 1723 case AVP_TYPE_FLOAT32://f32 1724 return EQ(A .f32,diameap_get_num(B, datatype).f32);1724 return EQ(A->f32,diameap_get_num(B, datatype).f32); 1725 1725 break; 1726 1726 case AVP_TYPE_FLOAT64://f64 1727 return EQ(A .f64,diameap_get_num(B, datatype).f64);1727 return EQ(A->f64,diameap_get_num(B, datatype).f64); 1728 1728 break; 1729 1729 default: … … 1745 1745 regex_t rule_regexp; 1746 1746 regcomp(&rule_regexp, B, REG_EXTENDED | REG_NOSUB | REG_ICASE); 1747 if (regexec(&rule_regexp, (char *)A .os.data, 0, NULL, 0) != 0)1747 if (regexec(&rule_regexp, (char *)A->os.data, 0, NULL, 0) != 0) 1748 1748 { 1749 1749 authorized = FALSE; … … 1766 1766 { 1767 1767 case AVP_TYPE_INTEGER32://i32 1768 return GT(A .i32, diameap_get_num(B, datatype).i32);1768 return GT(A->i32, diameap_get_num(B, datatype).i32); 1769 1769 break; 1770 1770 case AVP_TYPE_INTEGER64://i64 1771 return GT(A .i64, diameap_get_num(B, datatype).i64);1771 return GT(A->i64, diameap_get_num(B, datatype).i64); 1772 1772 break; 1773 1773 case AVP_TYPE_UNSIGNED32://u32 1774 return GT(A .u32, diameap_get_num(B, datatype).u32);1774 return GT(A->u32, diameap_get_num(B, datatype).u32); 1775 1775 break; 1776 1776 case AVP_TYPE_UNSIGNED64://u64 1777 return GT(A .u64, diameap_get_num(B, datatype).u64);1777 return GT(A->u64, diameap_get_num(B, datatype).u64); 1778 1778 break; 1779 1779 case AVP_TYPE_FLOAT32://f32 1780 return GT(A .f32, diameap_get_num(B, datatype).f32);1780 return GT(A->f32, diameap_get_num(B, datatype).f32); 1781 1781 break; 1782 1782 case AVP_TYPE_FLOAT64://f64 1783 return GT(A .f64, diameap_get_num(B, datatype).f64);1783 return GT(A->f64, diameap_get_num(B, datatype).f64); 1784 1784 break; 1785 1785 default: … … 1800 1800 { 1801 1801 case AVP_TYPE_INTEGER32://i32 1802 return GE(A .i32,diameap_get_num(B, datatype).i32);1802 return GE(A->i32,diameap_get_num(B, datatype).i32); 1803 1803 break; 1804 1804 case AVP_TYPE_INTEGER64://i64 1805 return GE(A .i64,diameap_get_num(B, datatype).i64);1805 return GE(A->i64,diameap_get_num(B, datatype).i64); 1806 1806 break; 1807 1807 case AVP_TYPE_UNSIGNED32://u32 1808 return GE(A .u32,diameap_get_num(B, datatype).u32);1808 return GE(A->u32,diameap_get_num(B, datatype).u32); 1809 1809 break; 1810 1810 case AVP_TYPE_UNSIGNED64://u64 1811 return GE(A .u64,diameap_get_num(B, datatype).u64);1811 return GE(A->u64,diameap_get_num(B, datatype).u64); 1812 1812 break; 1813 1813 case AVP_TYPE_FLOAT32://f32 1814 return GE(A .f32,diameap_get_num(B, datatype).f32);1814 return GE(A->f32,diameap_get_num(B, datatype).f32); 1815 1815 break; 1816 1816 case AVP_TYPE_FLOAT64://f64 1817 return GE(A .f64,diameap_get_num(B, datatype).f64);1817 return GE(A->f64,diameap_get_num(B, datatype).f64); 1818 1818 break; 1819 1819 default: … … 1834 1834 { 1835 1835 case AVP_TYPE_INTEGER32://i32 1836 return LT(A .i32, diameap_get_num(B, datatype).i32);1836 return LT(A->i32, diameap_get_num(B, datatype).i32); 1837 1837 break; 1838 1838 case AVP_TYPE_INTEGER64://i64 1839 return LT(A .i64, diameap_get_num(B, datatype).i64);1839 return LT(A->i64, diameap_get_num(B, datatype).i64); 1840 1840 break; 1841 1841 case AVP_TYPE_UNSIGNED32://u32 1842 return LT(A .u32, diameap_get_num(B, datatype).u32);1842 return LT(A->u32, diameap_get_num(B, datatype).u32); 1843 1843 break; 1844 1844 case AVP_TYPE_UNSIGNED64://u64 1845 return LT(A .u64, diameap_get_num(B, datatype).u64);1845 return LT(A->u64, diameap_get_num(B, datatype).u64); 1846 1846 break; 1847 1847 case AVP_TYPE_FLOAT32://f32 1848 return LT(A .f32, diameap_get_num(B, datatype).f32);1848 return LT(A->f32, diameap_get_num(B, datatype).f32); 1849 1849 break; 1850 1850 case AVP_TYPE_FLOAT64://f64 1851 return LT(A .f64, diameap_get_num(B, datatype).f64);1851 return LT(A->f64, diameap_get_num(B, datatype).f64); 1852 1852 break; 1853 1853 default: … … 1868 1868 { 1869 1869 case AVP_TYPE_INTEGER32://i32 1870 return LE(A .i32, diameap_get_num(B, datatype).i32);1870 return LE(A->i32, diameap_get_num(B, datatype).i32); 1871 1871 break; 1872 1872 case AVP_TYPE_INTEGER64://i64 1873 return LE(A .i64, diameap_get_num(B, datatype).i64);1873 return LE(A->i64, diameap_get_num(B, datatype).i64); 1874 1874 break; 1875 1875 case AVP_TYPE_UNSIGNED32://u32 1876 return LE(A .u32, diameap_get_num(B, datatype).u32);1876 return LE(A->u32, diameap_get_num(B, datatype).u32); 1877 1877 break; 1878 1878 case AVP_TYPE_UNSIGNED64://u64 1879 return LE(A .u64, diameap_get_num(B, datatype).u64);1879 return LE(A->u64, diameap_get_num(B, datatype).u64); 1880 1880 break; 1881 1881 case AVP_TYPE_FLOAT32://f32 1882 return LE(A .f32, diameap_get_num(B, datatype).f32);1882 return LE(A->f32, diameap_get_num(B, datatype).f32); 1883 1883 break; 1884 1884 case AVP_TYPE_FLOAT64://f64 1885 return LE(A .f64, diameap_get_num(B, datatype).f64);1885 return LE(A->f64, diameap_get_num(B, datatype).f64); 1886 1886 break; 1887 1887 default: … … 1898 1898 operator) == TRUE)) 1899 1899 { 1900 if (strcmp((char *)A .os.data, B) != 0)1900 if (strcmp((char *)A->os.data, B) != 0) 1901 1901 return TRUE; 1902 1902 else … … 1910 1910 { 1911 1911 case AVP_TYPE_INTEGER32://i32 1912 return NE(A .i32, diameap_get_num(B, datatype).i32);1912 return NE(A->i32, diameap_get_num(B, datatype).i32); 1913 1913 break; 1914 1914 case AVP_TYPE_INTEGER64://i64 1915 return NE(A .i64, diameap_get_num(B, datatype).i64);1915 return NE(A->i64, diameap_get_num(B, datatype).i64); 1916 1916 break; 1917 1917 case AVP_TYPE_UNSIGNED32://u32 1918 return NE(A .u32, diameap_get_num(B, datatype).u32);1918 return NE(A->u32, diameap_get_num(B, datatype).u32); 1919 1919 break; 1920 1920 case AVP_TYPE_UNSIGNED64://u64 1921 return NE(A .u64, diameap_get_num(B, datatype).u64);1921 return NE(A->u64, diameap_get_num(B, datatype).u64); 1922 1922 break; 1923 1923 case AVP_TYPE_FLOAT32://f32 1924 return NE(A .f32, diameap_get_num(B, datatype).f32);1924 return NE(A->f32, diameap_get_num(B, datatype).f32); 1925 1925 break; 1926 1926 case AVP_TYPE_FLOAT64://f64 1927 return NE(A .f64, diameap_get_num(B, datatype).f64);1927 return NE(A->f64, diameap_get_num(B, datatype).f64); 1928 1928 break; 1929 1929 default: … … 1992 1992 } 1993 1993 1994 int diameap_answer_set_attribute_valueA(union avp_value A, int *tofree,1994 int diameap_answer_set_attribute_valueA(union avp_value *A, int *tofree, 1995 1995 enum dict_avp_basetype datatype, union avp_value * rval) 1996 1996 { 1997 TRACE_ENTRY("%p %p % p%p",A,tofree,datatype,rval);1997 TRACE_ENTRY("%p %p %d %p",A,tofree,datatype,rval); 1998 1998 if (datatype == AVP_TYPE_OCTETSTRING) 1999 1999 { 2000 CHECK_MALLOC(rval->os.data=malloc(A .os.len));2001 memcpy(rval->os.data,A .os.data,A.os.len);2002 rval->os.len = A .os.len;2000 CHECK_MALLOC(rval->os.data=malloc(A->os.len)); 2001 memcpy(rval->os.data,A->os.data,A->os.len); 2002 rval->os.len = A->os.len; 2003 2003 *tofree = 1; 2004 2004 } 2005 2005 else 2006 2006 { 2007 *rval = A;2007 *rval = *A; 2008 2008 } 2009 2009 return 0; … … 2012 2012 enum dict_avp_basetype datatype, union avp_value * rval) 2013 2013 { 2014 TRACE_ENTRY("%p %p % p%p",B,tofree,datatype,rval);2014 TRACE_ENTRY("%p %p %d %p",B,tofree,datatype,rval); 2015 2015 if (datatype == AVP_TYPE_OCTETSTRING) 2016 2016 { … … 2092 2092 if (ret == 0) 2093 2093 { 2094 checked = diameap_check( avp_attrib->value, auth_attrib->value,2094 checked = diameap_check(&avp_attrib->value, auth_attrib->value, 2095 2095 op, avpdata.avp_basetype); 2096 2096 } … … 2119 2119 { 2120 2120 diameap_answer_set_attribute_valueA( 2121 avp_attrib->value, &ans_attrib->tofree,2121 &avp_attrib->value, &ans_attrib->tofree, 2122 2122 avpdata.avp_basetype, &ans_attrib->value); 2123 2123 } … … 2146 2146 if (toadd == 1) 2147 2147 { 2148 diameap_answer_set_attribute_valueA( avp_attrib->value,2148 diameap_answer_set_attribute_valueA(&avp_attrib->value, 2149 2149 &ans_attrib->tofree, avpdata.avp_basetype, 2150 2150 &ans_attrib->value); … … 2177 2177 2178 2178 static int diameap_policy_decision(struct diameap_state_machine * diameap_sm, 2179 struct diameap_eap_interface eap_i)2179 struct diameap_eap_interface *eap_i) 2180 2180 { 2181 2181 TRACE_ENTRY("%p %p",diameap_sm,eap_i); 2182 2182 2183 if ((eap_i .aaaFail == TRUE) && (eap_i.aaaSuccess == TRUE))2183 if ((eap_i->aaaFail == TRUE) && (eap_i->aaaSuccess == TRUE)) 2184 2184 { 2185 2185 TRACE_DEBUG(INFO,"%s Incorrect EAP decision. EAP process should not return both success and failure for the same session.(please report this problem.)",DIAMEAP_EXTENSION); … … 2187 2187 } 2188 2188 2189 if (eap_i .aaaFail == TRUE)2189 if (eap_i->aaaFail == TRUE) 2190 2190 { 2191 2191 diameap_sm->result_code = 4001; /* DIAMETER_AUTHENTICATION_REJECTED 4001 */ … … 2195 2195 } 2196 2196 2197 if (eap_i .aaaSuccess == FALSE)2197 if (eap_i->aaaSuccess == FALSE) 2198 2198 { 2199 2199 diameap_sm->result_code = 1001; /* DIAMETER_MULTI_ROUND_AUTH 1001 */ … … 2201 2201 } 2202 2202 2203 if (eap_i .aaaSuccess == TRUE)2203 if (eap_i->aaaSuccess == TRUE) 2204 2204 { 2205 2205 if (diameap_sm->auth_request_val == AUTHORIZE_AUTHENTICATE) … … 2874 2874 2875 2875 static int diameap_add_eap_payload(struct diameap_state_machine * diameap_sm, 2876 struct msg * ans, struct diameap_eap_interface eap_i)2876 struct msg * ans, struct diameap_eap_interface *eap_i) 2877 2877 { 2878 2878 TRACE_ENTRY("%p %p",diameap_sm,ans); … … 2907 2907 EAP_Max_Length = Framed_MTU - NAS_Port_Type_HeaderLength; 2908 2908 2909 if (eap_i .aaaEapReqData.length <= EAP_Max_Length)2909 if (eap_i->aaaEapReqData.length <= EAP_Max_Length) 2910 2910 { 2911 2911 … … 2913 2913 { 2914 2914 CHECK_FCT(fd_msg_avp_new(dataobj_eap_payload, 0, &avp)); 2915 avp_val.os.data = eap_i .aaaEapReqData.data;2916 avp_val.os.len = eap_i .aaaEapReqData.length;2915 avp_val.os.data = eap_i->aaaEapReqData.data; 2916 avp_val.os.len = eap_i->aaaEapReqData.length; 2917 2917 CHECK_FCT(fd_msg_avp_setvalue(avp, &avp_val)); 2918 2918 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, avp ) ); … … 2925 2925 2926 2926 CHECK_FCT(fd_msg_avp_new(dataobj_eap_payload, 0, &diameap_sm->lastReqEAPavp)); 2927 avp_val.os.data = eap_i .aaaEapReqData.data;2928 avp_val.os.len = eap_i .aaaEapReqData.length;2927 avp_val.os.data = eap_i->aaaEapReqData.data; 2928 avp_val.os.len = eap_i->aaaEapReqData.length; 2929 2929 CHECK_FCT(fd_msg_avp_setvalue(diameap_sm->lastReqEAPavp, &avp_val)); 2930 2930 … … 2947 2947 static int diameap_add_eap_success_avps( 2948 2948 struct diameap_state_machine * diameap_sm, struct msg * ans, 2949 struct diameap_eap_interface eap_i)2949 struct diameap_eap_interface *eap_i) 2950 2950 { 2951 2951 TRACE_ENTRY("%p %p %p",diameap_sm,ans,eap_i); … … 2955 2955 2956 2956 /* EAP-Master-Session-Key AVP */ 2957 if (eap_i .aaaEapKeyAvailable == TRUE)2957 if (eap_i->aaaEapKeyAvailable == TRUE) 2958 2958 { 2959 2959 CHECK_FCT(fd_msg_avp_new(dataobj_eap_master_session_key, 0, &avp)); 2960 avp_val.os.data = eap_i .aaaEapMSKData;2961 avp_val.os.len = eap_i .aaaEapMSKLength;2960 avp_val.os.data = eap_i->aaaEapMSKData; 2961 avp_val.os.len = eap_i->aaaEapMSKLength; 2962 2962 CHECK_FCT(fd_msg_avp_setvalue(avp, &avp_val)); 2963 2963 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, avp ) ); … … 2989 2989 TRACE_ENTRY("%p",diameap_sm); 2990 2990 2991 CHECK_FCT(diameap_authorization_get_attribs( diameap_sm->eap_sm.user, &diameap_sm->attributes));2991 CHECK_FCT(diameap_authorization_get_attribs(&diameap_sm->eap_sm.user, &diameap_sm->attributes)); 2992 2992 2993 2993 diameap_sm->authorized = TRUE; … … 3178 3178 case DIAMEAP_SELECT_DECISION: 3179 3179 3180 CHECK_FCT_DO( diameap_policy_decision(diameap_sm, eap_i),3180 CHECK_FCT_DO( diameap_policy_decision(diameap_sm,&eap_i), 3181 3181 goto s_end) 3182 3182 ; … … 3222 3222 { 3223 3223 TRACE_DEBUG(FULL+1,"%sSelect authentication attributes.",DIAMEAP_EXTENSION); 3224 CHECK_FCT_DO(diameap_authentication_get_attribs( diameap_sm->eap_sm.user, &diameap_sm->attributes),3224 CHECK_FCT_DO(diameap_authentication_get_attribs(&diameap_sm->eap_sm.user, &diameap_sm->attributes), 3225 3225 { TRACE_DEBUG(INFO,"%s Unable to get user's session attributes.",DIAMEAP_EXTENSION); goto s_end;}); 3226 3226 TRACE_DEBUG(FULL+1,"%sCreate answer authentication attributes.",DIAMEAP_EXTENSION); 3227 3227 CHECK_FCT_DO(diameap_answer_avp_attributes(diameap_sm), 3228 { TRACE_DEBUG(INFO,"% Unable to generate answer attributes.",DIAMEAP_EXTENSION); goto s_end;});3228 { TRACE_DEBUG(INFO,"%s Unable to generate answer attributes.",DIAMEAP_EXTENSION); goto s_end;}); 3229 3229 } 3230 3230 … … 3253 3253 TRACE_DEBUG(FULL+1,"%sAdding EAP-Payload to Diameter-EAP-Answer.",DIAMEAP_EXTENSION) 3254 3254 ; 3255 CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans, eap_i),3255 CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,&eap_i), 3256 3256 { TRACE_DEBUG(INFO,"%s Adding EAP-Payload AVP failed.",DIAMEAP_EXTENSION); goto s_end;}) 3257 3257 ; … … 3282 3282 TRACE_DEBUG(FULL+1,"%sAdding EAP-Payload to Diameter-EAP-Answer.",DIAMEAP_EXTENSION) 3283 3283 ; 3284 CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans, eap_i),3284 CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,&eap_i), 3285 3285 { TRACE_DEBUG(INFO,"%s Adding EAP-Payload AVP failed.",DIAMEAP_EXTENSION); goto s_end;}) 3286 3286 ; … … 3312 3312 TRACE_DEBUG(FULL+1,"%sAdding EAP-Payload to Diameter-EAP-Answer.",DIAMEAP_EXTENSION) 3313 3313 ; 3314 CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans, eap_i),3314 CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,&eap_i), 3315 3315 { TRACE_DEBUG(INFO,"%s Adding EAP-Payload AVP failed.",DIAMEAP_EXTENSION); goto s_end;}) 3316 3316 ; 3317 3317 TRACE_DEBUG(FULL+1,"%sAdding EAP success AVPs AVPs to Diameter-EAP-Answer.",DIAMEAP_EXTENSION) 3318 3318 ; 3319 CHECK_FCT_DO( diameap_add_eap_success_avps(diameap_sm, ans, eap_i),3319 CHECK_FCT_DO( diameap_add_eap_success_avps(diameap_sm, ans, &eap_i), 3320 3320 goto s_end) 3321 3321 ;
Note: See TracChangeset
for help on using the changeset viewer.