ROOT logo

/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn; 
  unsigned short tvnvsnl; 
  unsigned char *tvnnm;
  unsigned short tvnnml; 
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn; 
  unsigned short adtmode; 
  unsigned short adtnum;  
  sqltvn adttvn[1];       
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn; 
  unsigned short tdsnum; 
  unsigned char *tdsval[1]; 
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[11];
};
static const struct sqlcxp sqlfpn =
{
    10,
    "hdbconn.pc"
};


static unsigned int sqlctx = 71819;


static struct sqlexd {
   unsigned long  sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
   unsigned char  **sqphsv;
   unsigned long  *sqphsl;
            int   *sqphss;
            short **sqpind;
            int   *sqpins;
   unsigned long  *sqparm;
   unsigned long  **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
            int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
   unsigned int   sqlpfmem;
   unsigned char  *sqhstv[4];
   unsigned long  sqhstl[4];
            int   sqhsts[4];
            short *sqindv[4];
            int   sqinds[4];
   unsigned long  sqharm[4];
   unsigned long  *sqharc[4];
   unsigned short  sqadto[4];
   unsigned short  sqtdso[4];
} sqlstm = {13,4};

// Prototypes
extern "C" {
  void sqlcxt (void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlcx2t(void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlbuft(void **, char *);
  void sqlgs2t(void **, char *);
  void sqlorat(void **, unsigned int *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern "C" { void sqliem(unsigned char *, signed int *); }

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{13,4130,1,0,0,
5,0,0,0,0,0,27,99,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,
36,0,0,2,0,0,32,116,0,0,0,0,0,1,0,
};


//*-- AUTHOR : Ilse Koenig
//*-- Modified : 05/07/2001

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
// HDbConn
//
// Oracle connection class (used for Oracle utility programs)
// (uses the Oracle C/C++ precompiler)
//
/////////////////////////////////////////////////////////////
using namespace std;
#include "hdbconn.h"
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>

// Oracle communication area
#include <oraca.h>
// SQL Communications Area
#include <sqlca.h>
// SQL prototype routines
#include <sqlcpr.h> 
 
ClassImp(HDbConn)

HDbConn::HDbConn() {
  // Default constructor (Connection not yet open)
  dbIsOpen=kFALSE;
  noDDL=kTRUE;
}

HDbConn::~HDbConn() {
  // Destructor
  closeDbConn();
}

Bool_t HDbConn::connectDb(TString userName, TString dbName) {
  // Opens an Oracle connection (e.g.with:  "hades","db-hades")
  // Asks for a password.
  uName=userName;
  uName.ToUpper();
  if (uName.CompareTo("SCOTT")==0) {
    cout<<"User SCOTT is not allowed to use this program!"<<endl;
    return kFALSE;
  }
  TString connString=uName+"@"+dbName;
  Char_t* passwd = new Char_t[20];
  if (uName.CompareTo("HADES_ANA")==0) {
    strcpy(passwd,"hades");
    noDDL=kTRUE;
  } else {
    if (uName.CompareTo("HADES")==0) {
      cout<<"User HADES has readonly access!"<<endl;
      noDDL=kTRUE;
    } else {
      noDDL=kFALSE;
    }
    Char_t buf[20];
    Int_t ttyfd = 0;
    struct termios tio, itio;
    if ((ttyfd = ::open("/dev/tty", O_RDWR)) < 0) {
      fprintf(stderr, "cannot open tty, using stdin\n");
      ttyfd = 0;
    }
    if (tcgetattr(ttyfd, &tio) < 0) {
      fprintf (stderr, "\nUnable to get terminal characteristics: ");
      cout<<"enter password for user "<<userName<<" > ";
      Int_t n=scanf("%[^\n]%*c",passwd);
      if(n==0)cout<<"no password found!"<<endl;
    }
    itio = tio;
    tio.c_lflag &= ~(ECHO|ICANON);         
    tcsetattr (ttyfd, TCSAFLUSH, &tio);
    cout<<"enter password for user "<<userName<<" > ";
    Bool_t res=fgets(buf, 19, stdin);
    if(!res)cout<<"could not retrieve next buffer!"<<endl;
    tcsetattr (ttyfd, TCSAFLUSH, &itio);
    //close(ttyfd);
    sscanf(buf, "%s", passwd);
    cout<<endl;
  }
  if (dbIsOpen) closeDbConn();
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* uN;
    char* pW;
  /* EXEC SQL END DECLARE SECTION; */ 

  uN=(Char_t*)connString.Data();
  pW=passwd;
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("ORACLE error in HDbConn::openConnection(...):"); */ 

  /* EXEC SQL CONNECT :uN IDENTIFIED BY :pW; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )10;
  sqlstm.offset = (unsigned int  )5;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)uN;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)pW;
  sqlstm.sqhstl[1] = (unsigned long )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlstm.sqlcmax = (unsigned int )100;
  sqlstm.sqlcmin = (unsigned int )2;
  sqlstm.sqlcincr = (unsigned int )1;
  sqlstm.sqlctimeout = (unsigned int )0;
  sqlstm.sqlcnowait = (unsigned int )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("ORACLE error in HDbConn::openConnection(...):");
}


  if (sqlca.sqlcode==0) {
    dbIsOpen=kTRUE;
    cout<<"Connected to Oracle database"<<endl;
  }
  else cout<<"*** Failed to connect to Oracle ***"<<endl;
  delete [] passwd;
  return dbIsOpen;
}   
 
void HDbConn::closeDbConn() {  
  // Disconnects from ORACLE
  // A transaction will be automatically rolled back, that means,
  // changes in the database are not stored without an explicit COMMIT before
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("ORACLE error in HDbConn::closeDbConn():"); */ 

  if (dbIsOpen) {
    /* EXEC SQL ROLLBACK RELEASE; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 13;
    sqlstm.arrsiz = 4;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )1;
    sqlstm.offset = (unsigned int  )36;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)4352;
    sqlstm.occurs = (unsigned int  )0;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) showSqlError("ORACLE error in HDbConn::closeDbConn():");
}


    dbIsOpen=kFALSE;
    cout<<"connection to Oracle closed"<<endl;
  }
}

void HDbConn::showSqlError(const Char_t* f) {
  // shows SQL error messages
  UChar_t errmsg[513];
  size_t buflen, msglen;
  buflen=sizeof(errmsg)-1;
  sqlglm(errmsg,&buflen,&msglen);
  if ((++msglen)<buflen) {
    errmsg[msglen]='\0';
  } else {
    errmsg[buflen]='\0';
  }
  Error(f,"\n%s\n",errmsg);
//  Error(f,"\n%s",sqlca.sqlerrm.sqlerrmc);
}
 hdbconn.pc.cc:1
 hdbconn.pc.cc:2
 hdbconn.pc.cc:3
 hdbconn.pc.cc:4
 hdbconn.pc.cc:5
 hdbconn.pc.cc:6
 hdbconn.pc.cc:7
 hdbconn.pc.cc:8
 hdbconn.pc.cc:9
 hdbconn.pc.cc:10
 hdbconn.pc.cc:11
 hdbconn.pc.cc:12
 hdbconn.pc.cc:13
 hdbconn.pc.cc:14
 hdbconn.pc.cc:15
 hdbconn.pc.cc:16
 hdbconn.pc.cc:17
 hdbconn.pc.cc:18
 hdbconn.pc.cc:19
 hdbconn.pc.cc:20
 hdbconn.pc.cc:21
 hdbconn.pc.cc:22
 hdbconn.pc.cc:23
 hdbconn.pc.cc:24
 hdbconn.pc.cc:25
 hdbconn.pc.cc:26
 hdbconn.pc.cc:27
 hdbconn.pc.cc:28
 hdbconn.pc.cc:29
 hdbconn.pc.cc:30
 hdbconn.pc.cc:31
 hdbconn.pc.cc:32
 hdbconn.pc.cc:33
 hdbconn.pc.cc:34
 hdbconn.pc.cc:35
 hdbconn.pc.cc:36
 hdbconn.pc.cc:37
 hdbconn.pc.cc:38
 hdbconn.pc.cc:39
 hdbconn.pc.cc:40
 hdbconn.pc.cc:41
 hdbconn.pc.cc:42
 hdbconn.pc.cc:43
 hdbconn.pc.cc:44
 hdbconn.pc.cc:45
 hdbconn.pc.cc:46
 hdbconn.pc.cc:47
 hdbconn.pc.cc:48
 hdbconn.pc.cc:49
 hdbconn.pc.cc:50
 hdbconn.pc.cc:51
 hdbconn.pc.cc:52
 hdbconn.pc.cc:53
 hdbconn.pc.cc:54
 hdbconn.pc.cc:55
 hdbconn.pc.cc:56
 hdbconn.pc.cc:57
 hdbconn.pc.cc:58
 hdbconn.pc.cc:59
 hdbconn.pc.cc:60
 hdbconn.pc.cc:61
 hdbconn.pc.cc:62
 hdbconn.pc.cc:63
 hdbconn.pc.cc:64
 hdbconn.pc.cc:65
 hdbconn.pc.cc:66
 hdbconn.pc.cc:67
 hdbconn.pc.cc:68
 hdbconn.pc.cc:69
 hdbconn.pc.cc:70
 hdbconn.pc.cc:71
 hdbconn.pc.cc:72
 hdbconn.pc.cc:73
 hdbconn.pc.cc:74
 hdbconn.pc.cc:75
 hdbconn.pc.cc:76
 hdbconn.pc.cc:77
 hdbconn.pc.cc:78
 hdbconn.pc.cc:79
 hdbconn.pc.cc:80
 hdbconn.pc.cc:81
 hdbconn.pc.cc:82
 hdbconn.pc.cc:83
 hdbconn.pc.cc:84
 hdbconn.pc.cc:85
 hdbconn.pc.cc:86
 hdbconn.pc.cc:87
 hdbconn.pc.cc:88
 hdbconn.pc.cc:89
 hdbconn.pc.cc:90
 hdbconn.pc.cc:91
 hdbconn.pc.cc:92
 hdbconn.pc.cc:93
 hdbconn.pc.cc:94
 hdbconn.pc.cc:95
 hdbconn.pc.cc:96
 hdbconn.pc.cc:97
 hdbconn.pc.cc:98
 hdbconn.pc.cc:99
 hdbconn.pc.cc:100
 hdbconn.pc.cc:101
 hdbconn.pc.cc:102
 hdbconn.pc.cc:103
 hdbconn.pc.cc:104
 hdbconn.pc.cc:105
 hdbconn.pc.cc:106
 hdbconn.pc.cc:107
 hdbconn.pc.cc:108
 hdbconn.pc.cc:109
 hdbconn.pc.cc:110
 hdbconn.pc.cc:111
 hdbconn.pc.cc:112
 hdbconn.pc.cc:113
 hdbconn.pc.cc:114
 hdbconn.pc.cc:115
 hdbconn.pc.cc:116
 hdbconn.pc.cc:117
 hdbconn.pc.cc:118
 hdbconn.pc.cc:119
 hdbconn.pc.cc:120
 hdbconn.pc.cc:121
 hdbconn.pc.cc:122
 hdbconn.pc.cc:123
 hdbconn.pc.cc:124
 hdbconn.pc.cc:125
 hdbconn.pc.cc:126
 hdbconn.pc.cc:127
 hdbconn.pc.cc:128
 hdbconn.pc.cc:129
 hdbconn.pc.cc:130
 hdbconn.pc.cc:131
 hdbconn.pc.cc:132
 hdbconn.pc.cc:133
 hdbconn.pc.cc:134
 hdbconn.pc.cc:135
 hdbconn.pc.cc:136
 hdbconn.pc.cc:137
 hdbconn.pc.cc:138
 hdbconn.pc.cc:139
 hdbconn.pc.cc:140
 hdbconn.pc.cc:141
 hdbconn.pc.cc:142
 hdbconn.pc.cc:143
 hdbconn.pc.cc:144
 hdbconn.pc.cc:145
 hdbconn.pc.cc:146
 hdbconn.pc.cc:147
 hdbconn.pc.cc:148
 hdbconn.pc.cc:149
 hdbconn.pc.cc:150
 hdbconn.pc.cc:151
 hdbconn.pc.cc:152
 hdbconn.pc.cc:153
 hdbconn.pc.cc:154
 hdbconn.pc.cc:155
 hdbconn.pc.cc:156
 hdbconn.pc.cc:157
 hdbconn.pc.cc:158
 hdbconn.pc.cc:159
 hdbconn.pc.cc:160
 hdbconn.pc.cc:161
 hdbconn.pc.cc:162
 hdbconn.pc.cc:163
 hdbconn.pc.cc:164
 hdbconn.pc.cc:165
 hdbconn.pc.cc:166
 hdbconn.pc.cc:167
 hdbconn.pc.cc:168
 hdbconn.pc.cc:169
 hdbconn.pc.cc:170
 hdbconn.pc.cc:171
 hdbconn.pc.cc:172
 hdbconn.pc.cc:173
 hdbconn.pc.cc:174
 hdbconn.pc.cc:175
 hdbconn.pc.cc:176
 hdbconn.pc.cc:177
 hdbconn.pc.cc:178
 hdbconn.pc.cc:179
 hdbconn.pc.cc:180
 hdbconn.pc.cc:181
 hdbconn.pc.cc:182
 hdbconn.pc.cc:183
 hdbconn.pc.cc:184
 hdbconn.pc.cc:185
 hdbconn.pc.cc:186
 hdbconn.pc.cc:187
 hdbconn.pc.cc:188
 hdbconn.pc.cc:189
 hdbconn.pc.cc:190
 hdbconn.pc.cc:191
 hdbconn.pc.cc:192
 hdbconn.pc.cc:193
 hdbconn.pc.cc:194
 hdbconn.pc.cc:195
 hdbconn.pc.cc:196
 hdbconn.pc.cc:197
 hdbconn.pc.cc:198
 hdbconn.pc.cc:199
 hdbconn.pc.cc:200
 hdbconn.pc.cc:201
 hdbconn.pc.cc:202
 hdbconn.pc.cc:203
 hdbconn.pc.cc:204
 hdbconn.pc.cc:205
 hdbconn.pc.cc:206
 hdbconn.pc.cc:207
 hdbconn.pc.cc:208
 hdbconn.pc.cc:209
 hdbconn.pc.cc:210
 hdbconn.pc.cc:211
 hdbconn.pc.cc:212
 hdbconn.pc.cc:213
 hdbconn.pc.cc:214
 hdbconn.pc.cc:215
 hdbconn.pc.cc:216
 hdbconn.pc.cc:217
 hdbconn.pc.cc:218
 hdbconn.pc.cc:219
 hdbconn.pc.cc:220
 hdbconn.pc.cc:221
 hdbconn.pc.cc:222
 hdbconn.pc.cc:223
 hdbconn.pc.cc:224
 hdbconn.pc.cc:225
 hdbconn.pc.cc:226
 hdbconn.pc.cc:227
 hdbconn.pc.cc:228
 hdbconn.pc.cc:229
 hdbconn.pc.cc:230
 hdbconn.pc.cc:231
 hdbconn.pc.cc:232
 hdbconn.pc.cc:233
 hdbconn.pc.cc:234
 hdbconn.pc.cc:235
 hdbconn.pc.cc:236
 hdbconn.pc.cc:237
 hdbconn.pc.cc:238
 hdbconn.pc.cc:239
 hdbconn.pc.cc:240
 hdbconn.pc.cc:241
 hdbconn.pc.cc:242
 hdbconn.pc.cc:243
 hdbconn.pc.cc:244
 hdbconn.pc.cc:245
 hdbconn.pc.cc:246
 hdbconn.pc.cc:247
 hdbconn.pc.cc:248
 hdbconn.pc.cc:249
 hdbconn.pc.cc:250
 hdbconn.pc.cc:251
 hdbconn.pc.cc:252
 hdbconn.pc.cc:253
 hdbconn.pc.cc:254
 hdbconn.pc.cc:255
 hdbconn.pc.cc:256
 hdbconn.pc.cc:257
 hdbconn.pc.cc:258
 hdbconn.pc.cc:259
 hdbconn.pc.cc:260
 hdbconn.pc.cc:261
 hdbconn.pc.cc:262
 hdbconn.pc.cc:263
 hdbconn.pc.cc:264
 hdbconn.pc.cc:265
 hdbconn.pc.cc:266
 hdbconn.pc.cc:267
 hdbconn.pc.cc:268
 hdbconn.pc.cc:269
 hdbconn.pc.cc:270
 hdbconn.pc.cc:271
 hdbconn.pc.cc:272
 hdbconn.pc.cc:273
 hdbconn.pc.cc:274
 hdbconn.pc.cc:275
 hdbconn.pc.cc:276
 hdbconn.pc.cc:277
 hdbconn.pc.cc:278
 hdbconn.pc.cc:279
 hdbconn.pc.cc:280
 hdbconn.pc.cc:281
 hdbconn.pc.cc:282
 hdbconn.pc.cc:283
 hdbconn.pc.cc:284
 hdbconn.pc.cc:285
 hdbconn.pc.cc:286
 hdbconn.pc.cc:287
 hdbconn.pc.cc:288
 hdbconn.pc.cc:289
 hdbconn.pc.cc:290
 hdbconn.pc.cc:291
 hdbconn.pc.cc:292
 hdbconn.pc.cc:293
 hdbconn.pc.cc:294
 hdbconn.pc.cc:295
 hdbconn.pc.cc:296
 hdbconn.pc.cc:297
 hdbconn.pc.cc:298
 hdbconn.pc.cc:299
 hdbconn.pc.cc:300
 hdbconn.pc.cc:301
 hdbconn.pc.cc:302
 hdbconn.pc.cc:303
 hdbconn.pc.cc:304
 hdbconn.pc.cc:305
 hdbconn.pc.cc:306
 hdbconn.pc.cc:307
 hdbconn.pc.cc:308
 hdbconn.pc.cc:309
 hdbconn.pc.cc:310
 hdbconn.pc.cc:311
 hdbconn.pc.cc:312
 hdbconn.pc.cc:313
 hdbconn.pc.cc:314
 hdbconn.pc.cc:315
 hdbconn.pc.cc:316
 hdbconn.pc.cc:317
 hdbconn.pc.cc:318
 hdbconn.pc.cc:319
 hdbconn.pc.cc:320
 hdbconn.pc.cc:321
 hdbconn.pc.cc:322
 hdbconn.pc.cc:323
 hdbconn.pc.cc:324
 hdbconn.pc.cc:325
 hdbconn.pc.cc:326
 hdbconn.pc.cc:327
 hdbconn.pc.cc:328
 hdbconn.pc.cc:329
 hdbconn.pc.cc:330
 hdbconn.pc.cc:331
 hdbconn.pc.cc:332
 hdbconn.pc.cc:333
 hdbconn.pc.cc:334
 hdbconn.pc.cc:335
 hdbconn.pc.cc:336
 hdbconn.pc.cc:337
 hdbconn.pc.cc:338
 hdbconn.pc.cc:339
 hdbconn.pc.cc:340
 hdbconn.pc.cc:341
 hdbconn.pc.cc:342
 hdbconn.pc.cc:343
 hdbconn.pc.cc:344
 hdbconn.pc.cc:345
 hdbconn.pc.cc:346
 hdbconn.pc.cc:347
 hdbconn.pc.cc:348
 hdbconn.pc.cc:349
 hdbconn.pc.cc:350
 hdbconn.pc.cc:351