Ошибка сегментации при доступе к пользовательскому заголовку gsoap

0

Мы пытаемся включить настраиваемый заголовок в структуру gsoap. Ниже приведено определение заголовка:

typedef struct apollo__Header
{
   char *UserName;
   int VenueId;
   time_t TransactionTime;
};

struct SOAP_ENV__Header
{ 
   struct apollo__Header *apollo__Header 0; /* mustUnderstand */
};

Мы создали envStub и другие заголовки/код с помощью компилятора soapcpp2 с помощью следующей команды:

$(SOAPCPP2) -z1 -d env -p env $(GSOAP_HEADERS) env_soap.h
$(SOAPCPP2) -z1 -n -t -d gsoap $(GSOAP_HEADERS) apollo_soap.h

В клиентском коде мы инициализировали этот заголовок, как показано ниже:

void
prepareSoapHeader(soap* soap, const rString username)
{
    //pProperties props = AppProps::getProperties();
    apollo__Header *header = (apollo__Header*)malloc(sizeof(apollo__Header));
    header->UserName = new char[username.length() + 1];
    strcpy(header->UserName, username.toCString());
    header->VenueId = 110;
    header->TransactionTime = 0;
    soap->header = (SOAP_ENV__Header*)malloc(sizeof(SOAP_ENV__Header));
    soap->header->apollo__Header = header;
}

Теперь, когда мы вызываем веб-службы на сервере, мы получаем ошибку сегментации на сервере при доступе к этому заголовку! Сбой сервера здесь, когда ниже код запускается:

int apollo__getAvailableTestIDs(soap* soap, apollo__vAvailableTestIDs &resp)
{
   apollo__Header *header = getSoapHeader(soap);       
   if(header != NULL){
        AccessLogger l(soap->peer,"getAvailableTestIDs", "", header->UserName);
   }
   else{
        AccessLogger l(soap->peer,"getAvailableTestIDs", "", "UNKNOWN_USER");
}

Отладка показывает:

(gdb) p *soap->header->apollo__Header->UserName
Cannot access memory at address 0xc0de000001da1230
(gdb) p *soap->header->apollo__Header
Cannot access memory at address 0xc0de000001da1230

Мы попытались выяснить основную причину и обнаружили, что Header инициализируется правильно, напечатав его значения в клиентском коде. Однако tcpdump показывает, что клиент не отправляет значения заголовка на сервер, как это.

Похоже, это некоторая ошибка конфигурации. Может ли любая помощь в том, чтобы указывать на то, что здесь происходит неправильно. Любая помощь будет оценена по достоинству.

Благодарю.

  • 1
    Почему вы так смешиваете C и C ++? malloc и new ? Я предлагаю вам выбрать один язык и придерживаться его, бородавки и все.
  • 0
    Пилеборг: Хорошо, я исправлю это. Любая помощь в исходном выпуске?
Теги:
soap
gsoap

1 ответ

0

Если есть несколько файлов.c, и если это повторная компиляция, убедитесь, что у вас есть все объектные файлы с последними изменениями структуры.

  • 0
    Да, об этом позаботятся.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню