aboutsummaryrefslogtreecommitdiff
path: root/extras/fault.cpp
blob: b96e4d520f01ca29b951944e5904a4f82f5c8f7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*	Contributed by Allan Kelly, June 17, 2002
	Provides C++ alternatives for
	soap_print_fault and soap_print_fault_location functions
*/

/******************************************************************************/

SOAP_FMAC1
void
SOAP_FMAC2
soap_print_fault(struct soap *soap, std::ostream& msg)
{ if (soap->error)
  { if (!*soap_faultcode(soap))
      soap_set_fault(soap);
    if (!*soap_faultstring(soap))
      *soap_faultstring(soap) = "";
    msg << "SOAP FAULT: "
        << *soap_faultcode(soap) << std::endl
        << "\"" << *soap_faultstring(soap) << "\"" << std::endl;
    if (*soap_faultdetail(soap))
      msg << "Detail: " << *soap_faultdetail(soap) << std::endl;
  }
}

/******************************************************************************/

SOAP_FMAC1
void
SOAP_FMAC2
soap_print_fault_location(struct soap *soap, std::ostream& msg)
{ int c;
  if (soap->error && soap->buflen > 0)
  { if (soap->bufidx == 0)
      soap->bufidx = 1;
    c = soap->buf[soap->bufidx-1];
    soap->buf[soap->bufidx-1] = '\0';
    if (soap->bufidx < soap->buflen)
      msg << soap->buf << static_cast<char> (c) << std::endl
          << "** HERE **" << std::endl << soap->buf+soap->bufidx
          << std::endl;
    else
      msg << soap->buf << static_cast<char> (c) << std::endl
          << "** HERE **" << std::endl;
  }
}

/******************************************************************************/