Imported Upstream version 3.3.0
[debian/amanda] / perl / Amanda / Xfer.c
1 /* ----------------------------------------------------------------------------
2  * This file was automatically generated by SWIG (http://www.swig.org).
3  * Version 1.3.39
4  * 
5  * This file is not intended to be easily readable and contains a number of 
6  * coding conventions designed to improve portability and efficiency. Do not make
7  * changes to this file unless you know what you are doing--modify the SWIG 
8  * interface file instead. 
9  * ----------------------------------------------------------------------------- */
10
11 #include "../config/config.h"
12
13
14 #define SWIGPERL
15 #define SWIG_CASTRANK_MODE
16
17 /* -----------------------------------------------------------------------------
18  *  This section contains generic SWIG labels for method/variable
19  *  declarations/attributes, and other compiler dependent labels.
20  * ----------------------------------------------------------------------------- */
21
22 /* template workaround for compilers that cannot correctly implement the C++ standard */
23 #ifndef SWIGTEMPLATEDISAMBIGUATOR
24 # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
25 #  define SWIGTEMPLATEDISAMBIGUATOR template
26 # elif defined(__HP_aCC)
27 /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
28 /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
29 #  define SWIGTEMPLATEDISAMBIGUATOR template
30 # else
31 #  define SWIGTEMPLATEDISAMBIGUATOR
32 # endif
33 #endif
34
35 /* inline attribute */
36 #ifndef SWIGINLINE
37 # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
38 #   define SWIGINLINE inline
39 # else
40 #   define SWIGINLINE
41 # endif
42 #endif
43
44 /* attribute recognised by some compilers to avoid 'unused' warnings */
45 #ifndef SWIGUNUSED
46 # if defined(__GNUC__)
47 #   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
48 #     define SWIGUNUSED __attribute__ ((__unused__)) 
49 #   else
50 #     define SWIGUNUSED
51 #   endif
52 # elif defined(__ICC)
53 #   define SWIGUNUSED __attribute__ ((__unused__)) 
54 # else
55 #   define SWIGUNUSED 
56 # endif
57 #endif
58
59 #ifndef SWIG_MSC_UNSUPPRESS_4505
60 # if defined(_MSC_VER)
61 #   pragma warning(disable : 4505) /* unreferenced local function has been removed */
62 # endif 
63 #endif
64
65 #ifndef SWIGUNUSEDPARM
66 # ifdef __cplusplus
67 #   define SWIGUNUSEDPARM(p)
68 # else
69 #   define SWIGUNUSEDPARM(p) p SWIGUNUSED 
70 # endif
71 #endif
72
73 /* internal SWIG method */
74 #ifndef SWIGINTERN
75 # define SWIGINTERN static SWIGUNUSED
76 #endif
77
78 /* internal inline SWIG method */
79 #ifndef SWIGINTERNINLINE
80 # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
81 #endif
82
83 /* exporting methods */
84 #if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
85 #  ifndef GCC_HASCLASSVISIBILITY
86 #    define GCC_HASCLASSVISIBILITY
87 #  endif
88 #endif
89
90 #ifndef SWIGEXPORT
91 # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
92 #   if defined(STATIC_LINKED)
93 #     define SWIGEXPORT
94 #   else
95 #     define SWIGEXPORT __declspec(dllexport)
96 #   endif
97 # else
98 #   if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
99 #     define SWIGEXPORT __attribute__ ((visibility("default")))
100 #   else
101 #     define SWIGEXPORT
102 #   endif
103 # endif
104 #endif
105
106 /* calling conventions for Windows */
107 #ifndef SWIGSTDCALL
108 # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
109 #   define SWIGSTDCALL __stdcall
110 # else
111 #   define SWIGSTDCALL
112 # endif 
113 #endif
114
115 /* Deal with Microsoft's attempt at deprecating C standard runtime functions */
116 #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
117 # define _CRT_SECURE_NO_DEPRECATE
118 #endif
119
120 /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
121 #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
122 # define _SCL_SECURE_NO_DEPRECATE
123 #endif
124
125
126 /* -----------------------------------------------------------------------------
127  * swigrun.swg
128  *
129  * This file contains generic C API SWIG runtime support for pointer
130  * type checking.
131  * ----------------------------------------------------------------------------- */
132
133 /* This should only be incremented when either the layout of swig_type_info changes,
134    or for whatever reason, the runtime changes incompatibly */
135 #define SWIG_RUNTIME_VERSION "4"
136
137 /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
138 #ifdef SWIG_TYPE_TABLE
139 # define SWIG_QUOTE_STRING(x) #x
140 # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
141 # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
142 #else
143 # define SWIG_TYPE_TABLE_NAME
144 #endif
145
146 /*
147   You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
148   creating a static or dynamic library from the SWIG runtime code.
149   In 99.9% of the cases, SWIG just needs to declare them as 'static'.
150   
151   But only do this if strictly necessary, ie, if you have problems
152   with your compiler or suchlike.
153 */
154
155 #ifndef SWIGRUNTIME
156 # define SWIGRUNTIME SWIGINTERN
157 #endif
158
159 #ifndef SWIGRUNTIMEINLINE
160 # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
161 #endif
162
163 /*  Generic buffer size */
164 #ifndef SWIG_BUFFER_SIZE
165 # define SWIG_BUFFER_SIZE 1024
166 #endif
167
168 /* Flags for pointer conversions */
169 #define SWIG_POINTER_DISOWN        0x1
170 #define SWIG_CAST_NEW_MEMORY       0x2
171
172 /* Flags for new pointer objects */
173 #define SWIG_POINTER_OWN           0x1
174
175
176 /* 
177    Flags/methods for returning states.
178    
179    The SWIG conversion methods, as ConvertPtr, return and integer 
180    that tells if the conversion was successful or not. And if not,
181    an error code can be returned (see swigerrors.swg for the codes).
182    
183    Use the following macros/flags to set or process the returning
184    states.
185    
186    In old versions of SWIG, code such as the following was usually written:
187
188      if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
189        // success code
190      } else {
191        //fail code
192      }
193
194    Now you can be more explicit:
195
196     int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
197     if (SWIG_IsOK(res)) {
198       // success code
199     } else {
200       // fail code
201     }
202
203    which is the same really, but now you can also do
204
205     Type *ptr;
206     int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
207     if (SWIG_IsOK(res)) {
208       // success code
209       if (SWIG_IsNewObj(res) {
210         ...
211         delete *ptr;
212       } else {
213         ...
214       }
215     } else {
216       // fail code
217     }
218     
219    I.e., now SWIG_ConvertPtr can return new objects and you can
220    identify the case and take care of the deallocation. Of course that
221    also requires SWIG_ConvertPtr to return new result values, such as
222
223       int SWIG_ConvertPtr(obj, ptr,...) {         
224         if (<obj is ok>) {                             
225           if (<need new object>) {                     
226             *ptr = <ptr to new allocated object>; 
227             return SWIG_NEWOBJ;                
228           } else {                                     
229             *ptr = <ptr to old object>;        
230             return SWIG_OLDOBJ;                
231           }                                    
232         } else {                                       
233           return SWIG_BADOBJ;                  
234         }                                              
235       }
236
237    Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
238    more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
239    SWIG errors code.
240
241    Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
242    allows to return the 'cast rank', for example, if you have this
243
244        int food(double)
245        int fooi(int);
246
247    and you call
248  
249       food(1)   // cast rank '1'  (1 -> 1.0)
250       fooi(1)   // cast rank '0'
251
252    just use the SWIG_AddCast()/SWIG_CheckState()
253 */
254
255 #define SWIG_OK                    (0) 
256 #define SWIG_ERROR                 (-1)
257 #define SWIG_IsOK(r)               (r >= 0)
258 #define SWIG_ArgError(r)           ((r != SWIG_ERROR) ? r : SWIG_TypeError)  
259
260 /* The CastRankLimit says how many bits are used for the cast rank */
261 #define SWIG_CASTRANKLIMIT         (1 << 8)
262 /* The NewMask denotes the object was created (using new/malloc) */
263 #define SWIG_NEWOBJMASK            (SWIG_CASTRANKLIMIT  << 1)
264 /* The TmpMask is for in/out typemaps that use temporal objects */
265 #define SWIG_TMPOBJMASK            (SWIG_NEWOBJMASK << 1)
266 /* Simple returning values */
267 #define SWIG_BADOBJ                (SWIG_ERROR)
268 #define SWIG_OLDOBJ                (SWIG_OK)
269 #define SWIG_NEWOBJ                (SWIG_OK | SWIG_NEWOBJMASK)
270 #define SWIG_TMPOBJ                (SWIG_OK | SWIG_TMPOBJMASK)
271 /* Check, add and del mask methods */
272 #define SWIG_AddNewMask(r)         (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
273 #define SWIG_DelNewMask(r)         (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
274 #define SWIG_IsNewObj(r)           (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
275 #define SWIG_AddTmpMask(r)         (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
276 #define SWIG_DelTmpMask(r)         (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
277 #define SWIG_IsTmpObj(r)           (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
278
279 /* Cast-Rank Mode */
280 #if defined(SWIG_CASTRANK_MODE)
281 #  ifndef SWIG_TypeRank
282 #    define SWIG_TypeRank             unsigned long
283 #  endif
284 #  ifndef SWIG_MAXCASTRANK            /* Default cast allowed */
285 #    define SWIG_MAXCASTRANK          (2)
286 #  endif
287 #  define SWIG_CASTRANKMASK          ((SWIG_CASTRANKLIMIT) -1)
288 #  define SWIG_CastRank(r)           (r & SWIG_CASTRANKMASK)
289 SWIGINTERNINLINE int SWIG_AddCast(int r) { 
290   return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
291 }
292 SWIGINTERNINLINE int SWIG_CheckState(int r) { 
293   return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; 
294 }
295 #else /* no cast-rank mode */
296 #  define SWIG_AddCast
297 #  define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
298 #endif
299
300
301 #include <string.h>
302
303 #ifdef __cplusplus
304 extern "C" {
305 #endif
306
307 typedef void *(*swig_converter_func)(void *, int *);
308 typedef struct swig_type_info *(*swig_dycast_func)(void **);
309
310 /* Structure to store information on one type */
311 typedef struct swig_type_info {
312   const char             *name;                 /* mangled name of this type */
313   const char             *str;                  /* human readable name of this type */
314   swig_dycast_func        dcast;                /* dynamic cast function down a hierarchy */
315   struct swig_cast_info  *cast;                 /* linked list of types that can cast into this type */
316   void                   *clientdata;           /* language specific type data */
317   int                    owndata;               /* flag if the structure owns the clientdata */
318 } swig_type_info;
319
320 /* Structure to store a type and conversion function used for casting */
321 typedef struct swig_cast_info {
322   swig_type_info         *type;                 /* pointer to type that is equivalent to this type */
323   swig_converter_func     converter;            /* function to cast the void pointers */
324   struct swig_cast_info  *next;                 /* pointer to next cast in linked list */
325   struct swig_cast_info  *prev;                 /* pointer to the previous cast */
326 } swig_cast_info;
327
328 /* Structure used to store module information
329  * Each module generates one structure like this, and the runtime collects
330  * all of these structures and stores them in a circularly linked list.*/
331 typedef struct swig_module_info {
332   swig_type_info         **types;               /* Array of pointers to swig_type_info structures that are in this module */
333   size_t                 size;                  /* Number of types in this module */
334   struct swig_module_info *next;                /* Pointer to next element in circularly linked list */
335   swig_type_info         **type_initial;        /* Array of initially generated type structures */
336   swig_cast_info         **cast_initial;        /* Array of initially generated casting structures */
337   void                    *clientdata;          /* Language specific module data */
338 } swig_module_info;
339
340 /* 
341   Compare two type names skipping the space characters, therefore
342   "char*" == "char *" and "Class<int>" == "Class<int >", etc.
343
344   Return 0 when the two name types are equivalent, as in
345   strncmp, but skipping ' '.
346 */
347 SWIGRUNTIME int
348 SWIG_TypeNameComp(const char *f1, const char *l1,
349                   const char *f2, const char *l2) {
350   for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
351     while ((*f1 == ' ') && (f1 != l1)) ++f1;
352     while ((*f2 == ' ') && (f2 != l2)) ++f2;
353     if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
354   }
355   return (int)((l1 - f1) - (l2 - f2));
356 }
357
358 /*
359   Check type equivalence in a name list like <name1>|<name2>|...
360   Return 0 if not equal, 1 if equal
361 */
362 SWIGRUNTIME int
363 SWIG_TypeEquiv(const char *nb, const char *tb) {
364   int equiv = 0;
365   const char* te = tb + strlen(tb);
366   const char* ne = nb;
367   while (!equiv && *ne) {
368     for (nb = ne; *ne; ++ne) {
369       if (*ne == '|') break;
370     }
371     equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
372     if (*ne) ++ne;
373   }
374   return equiv;
375 }
376
377 /*
378   Check type equivalence in a name list like <name1>|<name2>|...
379   Return 0 if equal, -1 if nb < tb, 1 if nb > tb
380 */
381 SWIGRUNTIME int
382 SWIG_TypeCompare(const char *nb, const char *tb) {
383   int equiv = 0;
384   const char* te = tb + strlen(tb);
385   const char* ne = nb;
386   while (!equiv && *ne) {
387     for (nb = ne; *ne; ++ne) {
388       if (*ne == '|') break;
389     }
390     equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
391     if (*ne) ++ne;
392   }
393   return equiv;
394 }
395
396
397 /*
398   Check the typename
399 */
400 SWIGRUNTIME swig_cast_info *
401 SWIG_TypeCheck(const char *c, swig_type_info *ty) {
402   if (ty) {
403     swig_cast_info *iter = ty->cast;
404     while (iter) {
405       if (strcmp(iter->type->name, c) == 0) {
406         if (iter == ty->cast)
407           return iter;
408         /* Move iter to the top of the linked list */
409         iter->prev->next = iter->next;
410         if (iter->next)
411           iter->next->prev = iter->prev;
412         iter->next = ty->cast;
413         iter->prev = 0;
414         if (ty->cast) ty->cast->prev = iter;
415         ty->cast = iter;
416         return iter;
417       }
418       iter = iter->next;
419     }
420   }
421   return 0;
422 }
423
424 /* 
425   Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison
426 */
427 SWIGRUNTIME swig_cast_info *
428 SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) {
429   if (ty) {
430     swig_cast_info *iter = ty->cast;
431     while (iter) {
432       if (iter->type == from) {
433         if (iter == ty->cast)
434           return iter;
435         /* Move iter to the top of the linked list */
436         iter->prev->next = iter->next;
437         if (iter->next)
438           iter->next->prev = iter->prev;
439         iter->next = ty->cast;
440         iter->prev = 0;
441         if (ty->cast) ty->cast->prev = iter;
442         ty->cast = iter;
443         return iter;
444       }
445       iter = iter->next;
446     }
447   }
448   return 0;
449 }
450
451 /*
452   Cast a pointer up an inheritance hierarchy
453 */
454 SWIGRUNTIMEINLINE void *
455 SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
456   return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
457 }
458
459 /* 
460    Dynamic pointer casting. Down an inheritance hierarchy
461 */
462 SWIGRUNTIME swig_type_info *
463 SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
464   swig_type_info *lastty = ty;
465   if (!ty || !ty->dcast) return ty;
466   while (ty && (ty->dcast)) {
467     ty = (*ty->dcast)(ptr);
468     if (ty) lastty = ty;
469   }
470   return lastty;
471 }
472
473 /*
474   Return the name associated with this type
475 */
476 SWIGRUNTIMEINLINE const char *
477 SWIG_TypeName(const swig_type_info *ty) {
478   return ty->name;
479 }
480
481 /*
482   Return the pretty name associated with this type,
483   that is an unmangled type name in a form presentable to the user.
484 */
485 SWIGRUNTIME const char *
486 SWIG_TypePrettyName(const swig_type_info *type) {
487   /* The "str" field contains the equivalent pretty names of the
488      type, separated by vertical-bar characters.  We choose
489      to print the last name, as it is often (?) the most
490      specific. */
491   if (!type) return NULL;
492   if (type->str != NULL) {
493     const char *last_name = type->str;
494     const char *s;
495     for (s = type->str; *s; s++)
496       if (*s == '|') last_name = s+1;
497     return last_name;
498   }
499   else
500     return type->name;
501 }
502
503 /* 
504    Set the clientdata field for a type
505 */
506 SWIGRUNTIME void
507 SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
508   swig_cast_info *cast = ti->cast;
509   /* if (ti->clientdata == clientdata) return; */
510   ti->clientdata = clientdata;
511   
512   while (cast) {
513     if (!cast->converter) {
514       swig_type_info *tc = cast->type;
515       if (!tc->clientdata) {
516         SWIG_TypeClientData(tc, clientdata);
517       }
518     }    
519     cast = cast->next;
520   }
521 }
522 SWIGRUNTIME void
523 SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
524   SWIG_TypeClientData(ti, clientdata);
525   ti->owndata = 1;
526 }
527   
528 /*
529   Search for a swig_type_info structure only by mangled name
530   Search is a O(log #types)
531   
532   We start searching at module start, and finish searching when start == end.  
533   Note: if start == end at the beginning of the function, we go all the way around
534   the circular list.
535 */
536 SWIGRUNTIME swig_type_info *
537 SWIG_MangledTypeQueryModule(swig_module_info *start, 
538                             swig_module_info *end, 
539                             const char *name) {
540   swig_module_info *iter = start;
541   do {
542     if (iter->size) {
543       register size_t l = 0;
544       register size_t r = iter->size - 1;
545       do {
546         /* since l+r >= 0, we can (>> 1) instead (/ 2) */
547         register size_t i = (l + r) >> 1; 
548         const char *iname = iter->types[i]->name;
549         if (iname) {
550           register int compare = strcmp(name, iname);
551           if (compare == 0) {       
552             return iter->types[i];
553           } else if (compare < 0) {
554             if (i) {
555               r = i - 1;
556             } else {
557               break;
558             }
559           } else if (compare > 0) {
560             l = i + 1;
561           }
562         } else {
563           break; /* should never happen */
564         }
565       } while (l <= r);
566     }
567     iter = iter->next;
568   } while (iter != end);
569   return 0;
570 }
571
572 /*
573   Search for a swig_type_info structure for either a mangled name or a human readable name.
574   It first searches the mangled names of the types, which is a O(log #types)
575   If a type is not found it then searches the human readable names, which is O(#types).
576   
577   We start searching at module start, and finish searching when start == end.  
578   Note: if start == end at the beginning of the function, we go all the way around
579   the circular list.
580 */
581 SWIGRUNTIME swig_type_info *
582 SWIG_TypeQueryModule(swig_module_info *start, 
583                      swig_module_info *end, 
584                      const char *name) {
585   /* STEP 1: Search the name field using binary search */
586   swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
587   if (ret) {
588     return ret;
589   } else {
590     /* STEP 2: If the type hasn't been found, do a complete search
591        of the str field (the human readable name) */
592     swig_module_info *iter = start;
593     do {
594       register size_t i = 0;
595       for (; i < iter->size; ++i) {
596         if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
597           return iter->types[i];
598       }
599       iter = iter->next;
600     } while (iter != end);
601   }
602   
603   /* neither found a match */
604   return 0;
605 }
606
607 /* 
608    Pack binary data into a string
609 */
610 SWIGRUNTIME char *
611 SWIG_PackData(char *c, void *ptr, size_t sz) {
612   static const char hex[17] = "0123456789abcdef";
613   register const unsigned char *u = (unsigned char *) ptr;
614   register const unsigned char *eu =  u + sz;
615   for (; u != eu; ++u) {
616     register unsigned char uu = *u;
617     *(c++) = hex[(uu & 0xf0) >> 4];
618     *(c++) = hex[uu & 0xf];
619   }
620   return c;
621 }
622
623 /* 
624    Unpack binary data from a string
625 */
626 SWIGRUNTIME const char *
627 SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
628   register unsigned char *u = (unsigned char *) ptr;
629   register const unsigned char *eu = u + sz;
630   for (; u != eu; ++u) {
631     register char d = *(c++);
632     register unsigned char uu;
633     if ((d >= '0') && (d <= '9'))
634       uu = ((d - '0') << 4);
635     else if ((d >= 'a') && (d <= 'f'))
636       uu = ((d - ('a'-10)) << 4);
637     else 
638       return (char *) 0;
639     d = *(c++);
640     if ((d >= '0') && (d <= '9'))
641       uu |= (d - '0');
642     else if ((d >= 'a') && (d <= 'f'))
643       uu |= (d - ('a'-10));
644     else 
645       return (char *) 0;
646     *u = uu;
647   }
648   return c;
649 }
650
651 /* 
652    Pack 'void *' into a string buffer.
653 */
654 SWIGRUNTIME char *
655 SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
656   char *r = buff;
657   if ((2*sizeof(void *) + 2) > bsz) return 0;
658   *(r++) = '_';
659   r = SWIG_PackData(r,&ptr,sizeof(void *));
660   if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
661   strcpy(r,name);
662   return buff;
663 }
664
665 SWIGRUNTIME const char *
666 SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
667   if (*c != '_') {
668     if (strcmp(c,"NULL") == 0) {
669       *ptr = (void *) 0;
670       return name;
671     } else {
672       return 0;
673     }
674   }
675   return SWIG_UnpackData(++c,ptr,sizeof(void *));
676 }
677
678 SWIGRUNTIME char *
679 SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
680   char *r = buff;
681   size_t lname = (name ? strlen(name) : 0);
682   if ((2*sz + 2 + lname) > bsz) return 0;
683   *(r++) = '_';
684   r = SWIG_PackData(r,ptr,sz);
685   if (lname) {
686     strncpy(r,name,lname+1);
687   } else {
688     *r = 0;
689   }
690   return buff;
691 }
692
693 SWIGRUNTIME const char *
694 SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
695   if (*c != '_') {
696     if (strcmp(c,"NULL") == 0) {
697       memset(ptr,0,sz);
698       return name;
699     } else {
700       return 0;
701     }
702   }
703   return SWIG_UnpackData(++c,ptr,sz);
704 }
705
706 #ifdef __cplusplus
707 }
708 #endif
709
710 /*  Errors in SWIG */
711 #define  SWIG_UnknownError         -1 
712 #define  SWIG_IOError              -2 
713 #define  SWIG_RuntimeError         -3 
714 #define  SWIG_IndexError           -4 
715 #define  SWIG_TypeError            -5 
716 #define  SWIG_DivisionByZero       -6 
717 #define  SWIG_OverflowError        -7 
718 #define  SWIG_SyntaxError          -8 
719 #define  SWIG_ValueError           -9 
720 #define  SWIG_SystemError          -10
721 #define  SWIG_AttributeError       -11
722 #define  SWIG_MemoryError          -12 
723 #define  SWIG_NullReferenceError   -13
724
725
726
727 #ifdef __cplusplus
728 /* Needed on some windows machines---since MS plays funny games with the header files under C++ */
729 #include <math.h>
730 #include <stdlib.h>
731 extern "C" {
732 #endif
733 #include "EXTERN.h"
734 #include "perl.h"
735 #include "XSUB.h"
736
737 /* Add in functionality missing in older versions of Perl. Much of this is based on Devel-PPPort on cpan. */
738
739 /* Add PERL_REVISION, PERL_VERSION, PERL_SUBVERSION if missing */
740 #ifndef PERL_REVISION
741 #  if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
742 #    define PERL_PATCHLEVEL_H_IMPLICIT
743 #    include <patchlevel.h>
744 #  endif
745 #  if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
746 #    include <could_not_find_Perl_patchlevel.h>
747 #  endif
748 #  ifndef PERL_REVISION
749 #    define PERL_REVISION       (5)
750 #    define PERL_VERSION        PATCHLEVEL
751 #    define PERL_SUBVERSION     SUBVERSION
752 #  endif
753 #endif
754
755 #if defined(WIN32) && defined(PERL_OBJECT) && !defined(PerlIO_exportFILE)
756 #define PerlIO_exportFILE(fh,fl) (FILE*)(fh)
757 #endif
758
759 #ifndef SvIOK_UV
760 # define SvIOK_UV(sv)       (SvIOK(sv) && (SvUVX(sv) == SvIVX(sv)))
761 #endif
762
763 #ifndef SvUOK
764 # define SvUOK(sv)           SvIOK_UV(sv)
765 #endif
766
767 #if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)))
768 #  define PL_sv_undef               sv_undef
769 #  define PL_na                     na
770 #  define PL_errgv                  errgv
771 #  define PL_sv_no                  sv_no
772 #  define PL_sv_yes                 sv_yes
773 #  define PL_markstack_ptr          markstack_ptr
774 #endif
775
776 #ifndef IVSIZE
777 #  ifdef LONGSIZE
778 #    define IVSIZE LONGSIZE
779 #  else
780 #    define IVSIZE 4 /* A bold guess, but the best we can make. */
781 #  endif
782 #endif
783
784 #ifndef INT2PTR
785 #  if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
786 #    define PTRV                  UV
787 #    define INT2PTR(any,d)        (any)(d)
788 #  else
789 #    if PTRSIZE == LONGSIZE
790 #      define PTRV                unsigned long
791 #    else
792 #      define PTRV                unsigned
793 #    endif
794 #    define INT2PTR(any,d)        (any)(PTRV)(d)
795 #  endif
796
797 #  define NUM2PTR(any,d)  (any)(PTRV)(d)
798 #  define PTR2IV(p)       INT2PTR(IV,p)
799 #  define PTR2UV(p)       INT2PTR(UV,p)
800 #  define PTR2NV(p)       NUM2PTR(NV,p)
801
802 #  if PTRSIZE == LONGSIZE
803 #    define PTR2ul(p)     (unsigned long)(p)
804 #  else
805 #    define PTR2ul(p)     INT2PTR(unsigned long,p)
806 #  endif
807 #endif /* !INT2PTR */
808
809 #ifndef SvPV_nolen
810 # define SvPV_nolen(x) SvPV(x,PL_na)
811 #endif
812
813 #ifndef get_sv
814 #  define get_sv perl_get_sv
815 #endif
816
817 #ifndef ERRSV
818 #  define ERRSV get_sv("@",FALSE)
819 #endif
820
821 #ifndef pTHX_
822 #define pTHX_
823 #endif   
824
825 #include <string.h>
826 #ifdef __cplusplus
827 }
828 #endif
829
830 /* -----------------------------------------------------------------------------
831  * error manipulation
832  * ----------------------------------------------------------------------------- */
833
834 SWIGINTERN const char*
835 SWIG_Perl_ErrorType(int code) {
836   const char* type = 0;
837   switch(code) {
838   case SWIG_MemoryError:
839     type = "MemoryError";
840     break;
841   case SWIG_IOError:
842     type = "IOError";
843     break;
844   case SWIG_RuntimeError:
845     type = "RuntimeError";
846     break;
847   case SWIG_IndexError:
848     type = "IndexError";
849     break;
850   case SWIG_TypeError:
851     type = "TypeError";
852     break;
853   case SWIG_DivisionByZero:
854     type = "ZeroDivisionError";
855     break;
856   case SWIG_OverflowError:
857     type = "OverflowError";
858     break;
859   case SWIG_SyntaxError:
860     type = "SyntaxError";
861     break;
862   case SWIG_ValueError:
863     type = "ValueError";
864     break;
865   case SWIG_SystemError:
866     type = "SystemError";
867     break;
868   case SWIG_AttributeError:
869     type = "AttributeError";
870     break;
871   default:
872     type = "RuntimeError";
873   }
874   return type;
875 }
876
877
878
879
880 /* -----------------------------------------------------------------------------
881  * perlrun.swg
882  *
883  * This file contains the runtime support for Perl modules
884  * and includes code for managing global variables and pointer
885  * type checking.
886  * ----------------------------------------------------------------------------- */
887
888 #ifdef PERL_OBJECT
889 #define SWIG_PERL_OBJECT_DECL CPerlObj *SWIGUNUSEDPARM(pPerl),
890 #define SWIG_PERL_OBJECT_CALL pPerl,
891 #else
892 #define SWIG_PERL_OBJECT_DECL
893 #define SWIG_PERL_OBJECT_CALL
894 #endif
895
896 /* Common SWIG API */
897
898 /* for raw pointers */
899 #define SWIG_ConvertPtr(obj, pp, type, flags)           SWIG_Perl_ConvertPtr(SWIG_PERL_OBJECT_CALL obj, pp, type, flags)
900 #define SWIG_NewPointerObj(p, type, flags)              SWIG_Perl_NewPointerObj(SWIG_PERL_OBJECT_CALL p, type, flags)
901
902 /* for raw packed data */
903 #define SWIG_ConvertPacked(obj, p, s, type)             SWIG_Perl_ConvertPacked(SWIG_PERL_OBJECT_CALL obj, p, s, type)
904 #define SWIG_NewPackedObj(p, s, type)                   SWIG_Perl_NewPackedObj(SWIG_PERL_OBJECT_CALL p, s, type)
905
906 /* for class or struct pointers */
907 #define SWIG_ConvertInstance(obj, pptr, type, flags)    SWIG_ConvertPtr(obj, pptr, type, flags)
908 #define SWIG_NewInstanceObj(ptr, type, flags)           SWIG_NewPointerObj(ptr, type, flags)
909
910 /* for C or C++ function pointers */
911 #define SWIG_ConvertFunctionPtr(obj, pptr, type)        SWIG_ConvertPtr(obj, pptr, type, 0)
912 #define SWIG_NewFunctionPtrObj(ptr, type)               SWIG_NewPointerObj(ptr, type, 0)
913
914 /* for C++ member pointers, ie, member methods */
915 #define SWIG_ConvertMember(obj, ptr, sz, ty)            SWIG_ConvertPacked(obj, ptr, sz, ty)
916 #define SWIG_NewMemberObj(ptr, sz, type)                SWIG_NewPackedObj(ptr, sz, type)
917
918
919 /* Runtime API */
920
921 #define SWIG_GetModule(clientdata)                      SWIG_Perl_GetModule()
922 #define SWIG_SetModule(clientdata, pointer)             SWIG_Perl_SetModule(pointer)
923
924
925 /* Error manipulation */
926
927 #define SWIG_ErrorType(code)                            SWIG_Perl_ErrorType(code)               
928 #define SWIG_Error(code, msg)                           sv_setpvf(GvSV(PL_errgv),"%s %s\n", SWIG_ErrorType(code), msg)
929 #define SWIG_fail                                       goto fail                                                   
930
931 /* Perl-specific SWIG API */
932
933 #define SWIG_MakePtr(sv, ptr, type, flags)              SWIG_Perl_MakePtr(SWIG_PERL_OBJECT_CALL sv, ptr, type, flags)
934 #define SWIG_MakePackedObj(sv, p, s, type)              SWIG_Perl_MakePackedObj(SWIG_PERL_OBJECT_CALL sv, p, s, type)
935 #define SWIG_SetError(str)                              SWIG_Error(SWIG_RuntimeError, str)
936
937
938 #define SWIG_PERL_DECL_ARGS_1(arg1)                     (SWIG_PERL_OBJECT_DECL arg1)
939 #define SWIG_PERL_CALL_ARGS_1(arg1)                     (SWIG_PERL_OBJECT_CALL arg1)
940 #define SWIG_PERL_DECL_ARGS_2(arg1, arg2)               (SWIG_PERL_OBJECT_DECL arg1, arg2)
941 #define SWIG_PERL_CALL_ARGS_2(arg1, arg2)               (SWIG_PERL_OBJECT_CALL arg1, arg2)
942
943 /* -----------------------------------------------------------------------------
944  * pointers/data manipulation
945  * ----------------------------------------------------------------------------- */
946
947 /* For backward compatibility only */
948 #define SWIG_POINTER_EXCEPTION  0
949
950 #ifdef __cplusplus
951 extern "C" {
952 #endif
953
954 #define SWIG_OWNER   SWIG_POINTER_OWN
955 #define SWIG_SHADOW  SWIG_OWNER << 1
956
957 #define SWIG_MAYBE_PERL_OBJECT SWIG_PERL_OBJECT_DECL
958
959 /* SWIG Perl macros */
960
961 /* Macro to declare an XS function */
962 #ifndef XSPROTO
963 #   define XSPROTO(name) void name(pTHX_ CV* cv)
964 #endif
965
966 /* Macro to call an XS function */
967 #ifdef PERL_OBJECT 
968 #  define SWIG_CALLXS(_name) _name(cv,pPerl) 
969 #else 
970 #  ifndef MULTIPLICITY 
971 #    define SWIG_CALLXS(_name) _name(cv) 
972 #  else 
973 #    define SWIG_CALLXS(_name) _name(PERL_GET_THX, cv) 
974 #  endif 
975 #endif 
976
977 #ifdef PERL_OBJECT
978 #define MAGIC_PPERL  CPerlObj *pPerl = (CPerlObj *) this;
979
980 #ifdef __cplusplus
981 extern "C" {
982 #endif
983 typedef int (CPerlObj::*SwigMagicFunc)(SV *, MAGIC *);
984 #ifdef __cplusplus
985 }
986 #endif
987
988 #define SWIG_MAGIC(a,b) (SV *a, MAGIC *b)
989 #define SWIGCLASS_STATIC
990
991 #else /* PERL_OBJECT */
992
993 #define MAGIC_PPERL
994 #define SWIGCLASS_STATIC static SWIGUNUSED
995
996 #ifndef MULTIPLICITY
997 #define SWIG_MAGIC(a,b) (SV *a, MAGIC *b)
998
999 #ifdef __cplusplus
1000 extern "C" {
1001 #endif
1002 typedef int (*SwigMagicFunc)(SV *, MAGIC *);
1003 #ifdef __cplusplus
1004 }
1005 #endif
1006
1007 #else /* MULTIPLICITY */
1008
1009 #define SWIG_MAGIC(a,b) (struct interpreter *interp, SV *a, MAGIC *b)
1010
1011 #ifdef __cplusplus
1012 extern "C" {
1013 #endif
1014 typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *);
1015 #ifdef __cplusplus
1016 }
1017 #endif
1018
1019 #endif /* MULTIPLICITY */
1020 #endif /* PERL_OBJECT */
1021
1022 /* Workaround for bug in perl 5.6.x croak and earlier */
1023 #if (PERL_VERSION < 8)
1024 #  ifdef PERL_OBJECT
1025 #    define SWIG_croak_null() SWIG_Perl_croak_null(pPerl)
1026 static void SWIG_Perl_croak_null(CPerlObj *pPerl)
1027 #  else
1028 static void SWIG_croak_null()
1029 #  endif
1030 {
1031   SV *err=ERRSV;
1032 #  if (PERL_VERSION < 6)
1033   croak("%_", err);
1034 #  else
1035   if (SvOK(err) && !SvROK(err)) croak("%_", err);
1036   croak(Nullch);
1037 #  endif
1038 }
1039 #else
1040 #  define SWIG_croak_null() croak(Nullch)
1041 #endif
1042
1043
1044 /* 
1045    Define how strict is the cast between strings and integers/doubles
1046    when overloading between these types occurs.
1047    
1048    The default is making it as strict as possible by using SWIG_AddCast
1049    when needed.
1050    
1051    You can use -DSWIG_PERL_NO_STRICT_STR2NUM at compilation time to
1052    disable the SWIG_AddCast, making the casting between string and
1053    numbers less strict.
1054
1055    In the end, we try to solve the overloading between strings and
1056    numerical types in the more natural way, but if you can avoid it,
1057    well, avoid it using %rename, for example.
1058 */
1059 #ifndef SWIG_PERL_NO_STRICT_STR2NUM
1060 # ifndef SWIG_PERL_STRICT_STR2NUM
1061 #  define SWIG_PERL_STRICT_STR2NUM
1062 # endif
1063 #endif
1064 #ifdef SWIG_PERL_STRICT_STR2NUM
1065 /* string takes precedence */
1066 #define SWIG_Str2NumCast(x) SWIG_AddCast(x)  
1067 #else
1068 /* number takes precedence */
1069 #define SWIG_Str2NumCast(x) x
1070 #endif
1071
1072
1073
1074 #include <stdlib.h>
1075
1076 SWIGRUNTIME const char *
1077 SWIG_Perl_TypeProxyName(const swig_type_info *type) {
1078   if (!type) return NULL;
1079   if (type->clientdata != NULL) {
1080     return (const char*) type->clientdata;
1081   } 
1082   else {
1083     return type->name;
1084   }
1085 }
1086
1087 /* Identical to SWIG_TypeCheck, except for strcmp comparison */
1088 SWIGRUNTIME swig_cast_info *
1089 SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) {
1090   if (ty) {
1091     swig_cast_info *iter = ty->cast;
1092     while (iter) {
1093       if ( (!iter->type->clientdata && (strcmp(iter->type->name, c) == 0)) ||
1094             (iter->type->clientdata && (strcmp((char*)iter->type->clientdata, c) == 0)) ) {
1095         if (iter == ty->cast)
1096           return iter;
1097         /* Move iter to the top of the linked list */
1098         iter->prev->next = iter->next;
1099         if (iter->next)
1100           iter->next->prev = iter->prev;
1101         iter->next = ty->cast;
1102         iter->prev = 0;
1103         if (ty->cast) ty->cast->prev = iter;
1104         ty->cast = iter;
1105         return iter;
1106       }
1107       iter = iter->next;
1108     }
1109   }
1110   return 0;
1111 }
1112
1113 /* Function for getting a pointer value */
1114
1115 SWIGRUNTIME int
1116 SWIG_Perl_ConvertPtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags) {
1117   swig_cast_info *tc;
1118   void *voidptr = (void *)0;
1119   SV *tsv = 0;
1120   /* If magical, apply more magic */
1121   if (SvGMAGICAL(sv))
1122     mg_get(sv);
1123
1124   /* Check to see if this is an object */
1125   if (sv_isobject(sv)) {
1126     IV tmp = 0;
1127     tsv = (SV*) SvRV(sv);
1128     if ((SvTYPE(tsv) == SVt_PVHV)) {
1129       MAGIC *mg;
1130       if (SvMAGICAL(tsv)) {
1131         mg = mg_find(tsv,'P');
1132         if (mg) {
1133           sv = mg->mg_obj;
1134           if (sv_isobject(sv)) {
1135             tsv = (SV*)SvRV(sv);
1136             tmp = SvIV(tsv);
1137           }
1138         }
1139       } else {
1140         return SWIG_ERROR;
1141       }
1142     } else {
1143       tmp = SvIV(tsv);
1144     }
1145     voidptr = INT2PTR(void *,tmp);
1146   } else if (! SvOK(sv)) {            /* Check for undef */
1147     *(ptr) = (void *) 0;
1148     return SWIG_OK;
1149   } else if (SvTYPE(sv) == SVt_RV) {  /* Check for NULL pointer */
1150     if (!SvROK(sv)) {
1151       *(ptr) = (void *) 0;
1152       return SWIG_OK;
1153     } else {
1154       return SWIG_ERROR;
1155     }
1156   } else {                            /* Don't know what it is */
1157     return SWIG_ERROR;
1158   }
1159   if (_t) {
1160     /* Now see if the types match */
1161     char *_c = HvNAME(SvSTASH(SvRV(sv)));
1162     tc = SWIG_TypeProxyCheck(_c,_t);
1163     if (!tc) {
1164       return SWIG_ERROR;
1165     }
1166     {
1167       int newmemory = 0;
1168       *ptr = SWIG_TypeCast(tc,voidptr,&newmemory);
1169       assert(!newmemory); /* newmemory handling not yet implemented */
1170     }
1171   } else {
1172     *ptr = voidptr;
1173   }
1174
1175   /* 
1176    *  DISOWN implementation: we need a perl guru to check this one.
1177    */
1178   if (tsv && (flags & SWIG_POINTER_DISOWN)) {
1179     /* 
1180      *  almost copy paste code from below SWIG_POINTER_OWN setting
1181      */
1182     SV *obj = sv;
1183     HV *stash = SvSTASH(SvRV(obj));
1184     GV *gv = *(GV**) hv_fetch(stash, "OWNER", 5, TRUE);
1185     if (isGV(gv)) {
1186       HV *hv = GvHVn(gv);
1187       /*
1188        * To set ownership (see below), a newSViv(1) entry is added. 
1189        * Hence, to remove ownership, we delete the entry.
1190        */
1191       if (hv_exists_ent(hv, obj, 0)) {
1192         hv_delete_ent(hv, obj, 0, 0);
1193       }
1194     }
1195   }
1196   return SWIG_OK;
1197 }
1198
1199 SWIGRUNTIME void
1200 SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, int flags) {
1201   if (ptr && (flags & SWIG_SHADOW)) {
1202     SV *self;
1203     SV *obj=newSV(0);
1204     HV *hash=newHV();
1205     HV *stash;
1206     sv_setref_pv(obj, (char *) SWIG_Perl_TypeProxyName(t), ptr);
1207     stash=SvSTASH(SvRV(obj));
1208     if (flags & SWIG_POINTER_OWN) {
1209       HV *hv;
1210       GV *gv=*(GV**)hv_fetch(stash, "OWNER", 5, TRUE);
1211       if (!isGV(gv))
1212         gv_init(gv, stash, "OWNER", 5, FALSE);
1213       hv=GvHVn(gv);
1214       hv_store_ent(hv, obj, newSViv(1), 0);
1215     }
1216     sv_magic((SV *)hash, (SV *)obj, 'P', Nullch, 0);
1217     SvREFCNT_dec(obj);
1218     self=newRV_noinc((SV *)hash);
1219     sv_setsv(sv, self);
1220     SvREFCNT_dec((SV *)self);
1221     sv_bless(sv, stash);
1222   }
1223   else {
1224     sv_setref_pv(sv, (char *) SWIG_Perl_TypeProxyName(t), ptr);
1225   }
1226 }
1227
1228 SWIGRUNTIMEINLINE SV *
1229 SWIG_Perl_NewPointerObj(SWIG_MAYBE_PERL_OBJECT void *ptr, swig_type_info *t, int flags) {
1230   SV *result = sv_newmortal();
1231   SWIG_MakePtr(result, ptr, t, flags);
1232   return result;
1233 }
1234
1235 SWIGRUNTIME void
1236 SWIG_Perl_MakePackedObj(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, int sz, swig_type_info *type) {
1237   char result[1024];
1238   char *r = result;
1239   if ((2*sz + 1 + strlen(SWIG_Perl_TypeProxyName(type))) > 1000) return;
1240   *(r++) = '_';
1241   r = SWIG_PackData(r,ptr,sz);
1242   strcpy(r,SWIG_Perl_TypeProxyName(type));
1243   sv_setpv(sv, result);
1244 }
1245
1246 SWIGRUNTIME SV *
1247 SWIG_Perl_NewPackedObj(SWIG_MAYBE_PERL_OBJECT void *ptr, int sz, swig_type_info *type) {
1248   SV *result = sv_newmortal();
1249   SWIG_Perl_MakePackedObj(result, ptr, sz, type);
1250   return result;
1251 }
1252
1253 /* Convert a packed value value */
1254 SWIGRUNTIME int
1255 SWIG_Perl_ConvertPacked(SWIG_MAYBE_PERL_OBJECT SV *obj, void *ptr, int sz, swig_type_info *ty) {
1256   swig_cast_info *tc;
1257   const char  *c = 0;
1258
1259   if ((!obj) || (!SvOK(obj))) return SWIG_ERROR;
1260   c = SvPV_nolen(obj);
1261   /* Pointer values must start with leading underscore */
1262   if (*c != '_') return SWIG_ERROR;
1263   c++;
1264   c = SWIG_UnpackData(c,ptr,sz);
1265   if (ty) {
1266     tc = SWIG_TypeCheck(c,ty);
1267     if (!tc) return SWIG_ERROR;
1268   }
1269   return SWIG_OK;
1270 }
1271
1272
1273 /* Macros for low-level exception handling */
1274 #define SWIG_croak(x)    { SWIG_Error(SWIG_RuntimeError, x); SWIG_fail; }
1275
1276
1277 typedef XSPROTO(SwigPerlWrapper);
1278 typedef SwigPerlWrapper *SwigPerlWrapperPtr;
1279
1280 /* Structure for command table */
1281 typedef struct {
1282   const char         *name;
1283   SwigPerlWrapperPtr  wrapper;
1284 } swig_command_info;
1285
1286 /* Information for constant table */
1287
1288 #define SWIG_INT     1
1289 #define SWIG_FLOAT   2
1290 #define SWIG_STRING  3
1291 #define SWIG_POINTER 4
1292 #define SWIG_BINARY  5
1293
1294 /* Constant information structure */
1295 typedef struct swig_constant_info {
1296     int              type;
1297     const char      *name;
1298     long             lvalue;
1299     double           dvalue;
1300     void            *pvalue;
1301     swig_type_info **ptype;
1302 } swig_constant_info;
1303
1304
1305 /* Structure for variable table */
1306 typedef struct {
1307   const char   *name;
1308   SwigMagicFunc   set;
1309   SwigMagicFunc   get;
1310   swig_type_info  **type;
1311 } swig_variable_info;
1312
1313 /* Magic variable code */
1314 #ifndef PERL_OBJECT
1315 #define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
1316   #ifndef MULTIPLICITY
1317      SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *)) 
1318   #else
1319      SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *)) 
1320   #endif
1321 #else
1322 #  define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
1323 SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *)) 
1324 #endif
1325 {
1326   MAGIC *mg;
1327   sv_magic(sv,sv,'U',(char *) name,strlen(name));
1328   mg = mg_find(sv,'U');
1329   mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
1330   mg->mg_virtual->svt_get = (SwigMagicFunc) get;
1331   mg->mg_virtual->svt_set = (SwigMagicFunc) set;
1332   mg->mg_virtual->svt_len = 0;
1333   mg->mg_virtual->svt_clear = 0;
1334   mg->mg_virtual->svt_free = 0;
1335 }
1336
1337
1338 SWIGRUNTIME swig_module_info *
1339 SWIG_Perl_GetModule(void) {
1340   static void *type_pointer = (void *)0;
1341   SV *pointer;
1342
1343   /* first check if pointer already created */
1344   if (!type_pointer) {
1345     pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, FALSE | GV_ADDMULTI);
1346     if (pointer && SvOK(pointer)) {
1347       type_pointer = INT2PTR(swig_type_info **, SvIV(pointer));
1348     }
1349   }
1350
1351   return (swig_module_info *) type_pointer;
1352 }
1353
1354 SWIGRUNTIME void
1355 SWIG_Perl_SetModule(swig_module_info *module) {
1356   SV *pointer;
1357
1358   /* create a new pointer */
1359   pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, TRUE | GV_ADDMULTI);
1360   sv_setiv(pointer, PTR2IV(module));
1361 }
1362
1363 #ifdef __cplusplus
1364 }
1365 #endif
1366
1367 /* Workaround perl5 global namespace pollution. Note that undefining library
1368  * functions like fopen will not solve the problem on all platforms as fopen
1369  * might be a macro on Windows but not necessarily on other operating systems. */
1370 #ifdef do_open
1371   #undef do_open
1372 #endif
1373 #ifdef do_close
1374   #undef do_close
1375 #endif
1376 #ifdef scalar
1377   #undef scalar
1378 #endif
1379 #ifdef list
1380   #undef list
1381 #endif
1382 #ifdef apply
1383   #undef apply
1384 #endif
1385 #ifdef convert
1386   #undef convert
1387 #endif
1388 #ifdef Error
1389   #undef Error
1390 #endif
1391 #ifdef form
1392   #undef form
1393 #endif
1394 #ifdef vform
1395   #undef vform
1396 #endif
1397 #ifdef LABEL
1398   #undef LABEL
1399 #endif
1400 #ifdef METHOD
1401   #undef METHOD
1402 #endif
1403 #ifdef Move
1404   #undef Move
1405 #endif
1406 #ifdef yylex
1407   #undef yylex
1408 #endif
1409 #ifdef yyparse
1410   #undef yyparse
1411 #endif
1412 #ifdef yyerror
1413   #undef yyerror
1414 #endif
1415 #ifdef invert
1416   #undef invert
1417 #endif
1418 #ifdef ref
1419   #undef ref
1420 #endif
1421 #ifdef read
1422   #undef read
1423 #endif
1424 #ifdef write
1425   #undef write
1426 #endif
1427 #ifdef eof
1428   #undef eof
1429 #endif
1430 #ifdef bool
1431   #undef bool
1432 #endif
1433 #ifdef close
1434   #undef close
1435 #endif
1436 #ifdef rewind
1437   #undef rewind
1438 #endif
1439 #ifdef free
1440   #undef free
1441 #endif
1442 #ifdef malloc
1443   #undef malloc
1444 #endif
1445 #ifdef calloc
1446   #undef calloc
1447 #endif
1448 #ifdef Stat
1449   #undef Stat
1450 #endif
1451 #ifdef check
1452   #undef check
1453 #endif
1454 #ifdef seekdir
1455   #undef seekdir
1456 #endif
1457 #ifdef open
1458   #undef open
1459 #endif
1460 #ifdef readdir
1461   #undef readdir
1462 #endif
1463 #ifdef bind
1464   #undef bind
1465 #endif
1466
1467
1468
1469 #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) 
1470
1471 #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else 
1472
1473
1474
1475   #define SWIG_exception(code, msg) do { SWIG_Error(code, msg); SWIG_fail;; } while(0) 
1476
1477
1478 /* -------- TYPES TABLE (BEGIN) -------- */
1479
1480 #define SWIGTYPE_p_DirectTCPAddr swig_types[0]
1481 #define SWIGTYPE_p_Xfer swig_types[1]
1482 #define SWIGTYPE_p_XferElement swig_types[2]
1483 #define SWIGTYPE_p_amglue_Source swig_types[3]
1484 #define SWIGTYPE_p_char swig_types[4]
1485 #define SWIGTYPE_p_double swig_types[5]
1486 #define SWIGTYPE_p_float swig_types[6]
1487 #define SWIGTYPE_p_gint64 swig_types[7]
1488 #define SWIGTYPE_p_gsize swig_types[8]
1489 #define SWIGTYPE_p_guint32 swig_types[9]
1490 #define SWIGTYPE_p_guint64 swig_types[10]
1491 #define SWIGTYPE_p_int swig_types[11]
1492 #define SWIGTYPE_p_p_XferElement swig_types[12]
1493 #define SWIGTYPE_p_p_char swig_types[13]
1494 #define SWIGTYPE_p_p_void swig_types[14]
1495 #define SWIGTYPE_p_unsigned_char swig_types[15]
1496 static swig_type_info *swig_types[17];
1497 static swig_module_info swig_module = {swig_types, 16, 0, 0, 0, 0};
1498 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
1499 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
1500
1501 /* -------- TYPES TABLE (END) -------- */
1502
1503 #define SWIG_init    boot_Amanda__Xfer
1504
1505 #define SWIG_name   "Amanda::Xferc::boot_Amanda__Xfer"
1506 #define SWIG_prefix "Amanda::Xferc::"
1507
1508 #define SWIGVERSION 0x010339 
1509 #define SWIG_VERSION SWIGVERSION
1510
1511
1512 #define SWIG_as_voidptr(a) (void *)((const void *)(a)) 
1513 #define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a)) 
1514
1515
1516 #ifdef __cplusplus
1517 extern "C"
1518 #endif
1519 #ifndef PERL_OBJECT
1520 #ifndef MULTIPLICITY
1521 SWIGEXPORT void SWIG_init (CV* cv);
1522 #else
1523 SWIGEXPORT void SWIG_init (pTHXo_ CV* cv);
1524 #endif
1525 #else
1526 SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *);
1527 #endif
1528
1529
1530 #include "amglue.h"
1531
1532
1533 #include "amglue.h"
1534
1535
1536 #include "amglue.h"
1537
1538
1539 #include "glib-util.h"
1540 #include "amxfer.h"
1541 #include "amanda.h"
1542 #include "sockaddr-util.h"
1543
1544
1545 SWIGINTERNINLINE SV *
1546 SWIG_From_long  SWIG_PERL_DECL_ARGS_1(long value)
1547 {    
1548   SV *obj = sv_newmortal();
1549   sv_setiv(obj, (IV) value);
1550   return obj;
1551 }
1552
1553
1554 SWIGINTERNINLINE SV *
1555 SWIG_From_int  SWIG_PERL_DECL_ARGS_1(int value)
1556 {    
1557   return SWIG_From_long  SWIG_PERL_CALL_ARGS_1(value);
1558 }
1559
1560
1561 /* Given an XMsg, return a hashref representing the message as a pure-perl
1562  * object.  The object is new, has refcount 1, and is totally independent of
1563  * the underlying XMsg.
1564  *
1565  * Reflecting the XMsg directly into Perl avoids the need to reference-count
1566  * the XMsg objects themselves, which can simply be freed after a callback
1567  * completes.  The overhead of creating a hash is likely equivalent to or
1568  * less than the overhead that would be consumed with SWIG's swig_$field_get
1569  * accessors, assuming that perl code examines most of the fields in a message.
1570  *
1571  * @param msg: the message to represent
1572  * @returns: a perl SV
1573  */
1574 static SV *
1575 new_sv_for_xmsg(
1576     XMsg *msg)
1577 {
1578     static HV *amanda_xfer_msg_stash = NULL;
1579     HV *hash = newHV();
1580     SV *rv = newRV_noinc((SV *)hash);
1581
1582     /* bless the rv as an Amanda::Xfer::Msg object */
1583     if (!amanda_xfer_msg_stash) {
1584         amanda_xfer_msg_stash = gv_stashpv("Amanda::Xfer::Msg", GV_ADD);
1585     }
1586     sv_bless(rv, amanda_xfer_msg_stash);
1587
1588     /* TODO: consider optimizing by precomputing the hash values of
1589      * the keys? */
1590
1591     /* elt */
1592     hv_store(hash, "elt", 3, new_sv_for_xfer_element(msg->elt), 0);
1593
1594     /* type */
1595     hv_store(hash, "type", 4, newSViv(msg->type), 0);
1596
1597     /* type */
1598     hv_store(hash, "version", 7, newSViv(msg->version), 0);
1599
1600     /* message */
1601     if (msg->message)
1602         hv_store(hash, "message", 7, newSVpv(msg->message, 0), 0);
1603
1604     /* successful */
1605     hv_store(hash, "successful", 10, newSViv(msg->successful), 0);
1606
1607     /* eom */
1608     hv_store(hash, "eom", 3, newSViv(msg->eom), 0);
1609
1610     /* eof */
1611     hv_store(hash, "eof", 3, newSViv(msg->eof), 0);
1612
1613     /* size */
1614     hv_store(hash, "size", 4, amglue_newSVu64(msg->size), 0);
1615
1616     /* duration */
1617     hv_store(hash, "duration", 8, newSVnv(msg->duration), 0);
1618
1619     /* partnum */
1620     hv_store(hash, "partnum", 7, amglue_newSVu64(msg->partnum), 0);
1621
1622     /* fileno */
1623     hv_store(hash, "fileno", 6, amglue_newSVu64(msg->fileno), 0);
1624
1625     return rv;
1626 }
1627
1628
1629 #include <limits.h>
1630 #if !defined(SWIG_NO_LLONG_MAX)
1631 # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
1632 #   define LLONG_MAX __LONG_LONG_MAX__
1633 #   define LLONG_MIN (-LLONG_MAX - 1LL)
1634 #   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
1635 # endif
1636 #endif
1637
1638
1639 SWIGINTERN int
1640 SWIG_AsVal_double SWIG_PERL_DECL_ARGS_2(SV *obj, double *val)
1641 {
1642   if (SvNIOK(obj)) {
1643     if (val) *val = SvNV(obj);
1644     return SWIG_OK;
1645   } else if (SvIOK(obj)) {
1646     if (val) *val = (double) SvIV(obj);
1647     return SWIG_AddCast(SWIG_OK);
1648   } else {
1649     const char *nptr = SvPV_nolen(obj);
1650     if (nptr) {
1651       char *endptr;
1652       double v = strtod(nptr, &endptr);
1653       if (errno == ERANGE) {
1654         errno = 0;
1655         return SWIG_OverflowError;
1656       } else {
1657         if (*endptr == '\0') {
1658           if (val) *val = v;
1659           return SWIG_Str2NumCast(SWIG_OK);
1660         }
1661       }
1662     }
1663   }
1664   return SWIG_TypeError;
1665 }
1666
1667
1668 #include <float.h>
1669
1670
1671 #include <math.h>
1672
1673
1674 SWIGINTERNINLINE int
1675 SWIG_CanCastAsInteger(double *d, double min, double max) {
1676   double x = *d;
1677   if ((min <= x && x <= max)) {
1678    double fx = floor(x);
1679    double cx = ceil(x);
1680    double rd =  ((x - fx) < 0.5) ? fx : cx; /* simple rint */
1681    if ((errno == EDOM) || (errno == ERANGE)) {
1682      errno = 0;
1683    } else {
1684      double summ, reps, diff;
1685      if (rd < x) {
1686        diff = x - rd;
1687      } else if (rd > x) {
1688        diff = rd - x;
1689      } else {
1690        return 1;
1691      }
1692      summ = rd + x;
1693      reps = diff/summ;
1694      if (reps < 8*DBL_EPSILON) {
1695        *d = rd;
1696        return 1;
1697      }
1698    }
1699   }
1700   return 0;
1701 }
1702
1703
1704 SWIGINTERN int
1705 SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val) 
1706 {
1707   if (SvUOK(obj)) {
1708     if (val) *val = SvUV(obj);
1709     return SWIG_OK;
1710   } else  if (SvIOK(obj)) {
1711     long v = SvIV(obj);
1712     if (v >= 0) {
1713       if (val) *val = v;
1714       return SWIG_OK;
1715     } else {
1716       return SWIG_OverflowError;
1717     }
1718   } else {
1719     int dispatch = 0;
1720     const char *nptr = SvPV_nolen(obj);
1721     if (nptr) {
1722       char *endptr;
1723       unsigned long v;
1724       errno = 0;
1725       v = strtoul(nptr, &endptr,0);
1726       if (errno == ERANGE) {
1727         errno = 0;
1728         return SWIG_OverflowError;
1729       } else {
1730         if (*endptr == '\0') {
1731           if (val) *val = v;
1732           return SWIG_Str2NumCast(SWIG_OK);
1733         }
1734       }
1735     }
1736     if (!dispatch) {
1737       double d;
1738       int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d));
1739       if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) {
1740         if (val) *val = (unsigned long)(d);
1741         return res;
1742       }
1743     }
1744   }
1745   return SWIG_TypeError;
1746 }
1747
1748
1749 SWIGINTERN int
1750 SWIG_AsVal_unsigned_SS_int SWIG_PERL_DECL_ARGS_2(SV * obj, unsigned int *val)
1751 {
1752   unsigned long v;
1753   int res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, &v);
1754   if (SWIG_IsOK(res)) {
1755     if ((v > UINT_MAX)) {
1756       return SWIG_OverflowError;
1757     } else {
1758       if (val) *val = (unsigned int)(v);
1759     }
1760   }  
1761   return res;
1762 }
1763
1764
1765 SWIGINTERNINLINE SV *
1766 SWIG_FromCharPtrAndSize(const char* carray, size_t size)
1767 {
1768   SV *obj = sv_newmortal();
1769   if (carray) {
1770     sv_setpvn(obj, carray, size);
1771   } else {
1772     sv_setsv(obj, &PL_sv_undef);
1773   }
1774   return obj;
1775 }
1776
1777
1778 SWIGINTERNINLINE SV * 
1779 SWIG_FromCharPtr(const char *cptr)
1780
1781   return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
1782 }
1783
1784
1785 /* SWIG wants to treat this as a function */
1786 #define xfer_get_status(xfer) ((xfer)->status)
1787
1788
1789 static gboolean same_elements(
1790         XferElement *a,
1791         XferElement *b)
1792 {
1793     return a == b;
1794 }
1795
1796
1797 SWIGINTERNINLINE int
1798 SWIG_AsVal_size_t SWIG_PERL_DECL_ARGS_2(SV * obj, size_t *val)
1799 {
1800   unsigned long v;
1801   int res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, val ? &v : 0);
1802   if (SWIG_IsOK(res) && val) *val = (size_t)(v);
1803   return res;
1804 }
1805
1806
1807 SWIGINTERN int
1808 SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val)
1809 {
1810   if (SvIOK(obj)) {
1811     if (val) *val = SvIV(obj);
1812     return SWIG_OK;
1813   } else {
1814     int dispatch = 0;
1815     const char *nptr = SvPV_nolen(obj);
1816     if (nptr) {
1817       char *endptr;
1818       long v;
1819       errno = 0;
1820       v = strtol(nptr, &endptr,0);
1821       if (errno == ERANGE) {
1822         errno = 0;
1823         return SWIG_OverflowError;
1824       } else {
1825         if (*endptr == '\0') {
1826           if (val) *val = v;
1827           return SWIG_Str2NumCast(SWIG_OK);
1828         }
1829       }
1830     }
1831     if (!dispatch) {
1832       double d;
1833       int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d));
1834       if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) {
1835         if (val) *val = (long)(d);
1836         return res;
1837       }
1838     }
1839   }
1840   return SWIG_TypeError;
1841 }
1842
1843
1844 SWIGINTERN int
1845 SWIG_AsVal_int SWIG_PERL_DECL_ARGS_2(SV * obj, int *val)
1846 {
1847   long v;
1848   int res = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(obj, &v);
1849   if (SWIG_IsOK(res)) {
1850     if ((v < INT_MIN || v > INT_MAX)) {
1851       return SWIG_OverflowError;
1852     } else {
1853       if (val) *val = (int)(v);
1854     }
1855   }  
1856   return res;
1857 }
1858
1859
1860 static DirectTCPAddr *
1861 xfer_source_directtcp_listen_get_addrs(XferElement *elt) {
1862     return elt->input_listen_addrs;
1863 }
1864
1865
1866 SWIGINTERN int
1867 SWIG_AsVal_unsigned_SS_char SWIG_PERL_DECL_ARGS_2(SV * obj, unsigned char *val)
1868 {
1869   unsigned long v;
1870   int res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, &v);
1871   if (SWIG_IsOK(res)) {
1872     if ((v > UCHAR_MAX)) {
1873       return SWIG_OverflowError;
1874     } else {
1875       if (val) *val = (unsigned char)(v);
1876     }
1877   }  
1878   return res;
1879 }
1880
1881
1882 static DirectTCPAddr *
1883 xfer_dest_directtcp_listen_get_addrs(XferElement *elt) {
1884     return elt->output_listen_addrs;
1885 }
1886
1887
1888 static gboolean
1889 xmsgsource_perl_callback(
1890     gpointer data,
1891     struct XMsg *msg,
1892     Xfer *xfer)
1893 {
1894     dSP;
1895     amglue_Source *src = (amglue_Source *)data;
1896     SV *src_sv = NULL;
1897     SV *msg_sv = NULL;
1898     SV *xfer_sv = NULL;
1899
1900     /* keep the source around long enough for the call to finish */
1901     amglue_source_ref(src);
1902     g_assert(src->callback_sv != NULL);
1903
1904     ENTER;
1905     SAVETMPS;
1906
1907     /* create a new SV pointing to 'src', and increase its refcount
1908      * accordingly. */
1909     amglue_source_ref(src);
1910     src_sv = SWIG_NewPointerObj(src, SWIGTYPE_p_amglue_Source,
1911                                  SWIG_OWNER | SWIG_SHADOW);
1912     SvREFCNT_inc(src_sv);
1913
1914     msg_sv = new_sv_for_xmsg(msg);
1915     xfer_sv = new_sv_for_xfer(xfer);
1916
1917     PUSHMARK(SP);
1918     XPUSHs(sv_2mortal(src_sv));
1919     XPUSHs(sv_2mortal(msg_sv));
1920     XPUSHs(sv_2mortal(xfer_sv));
1921     PUTBACK;
1922
1923     call_sv(src->callback_sv, G_EVAL|G_DISCARD);
1924
1925     FREETMPS;
1926     LEAVE;
1927
1928     /* we no longer need the src */
1929     amglue_source_unref(src);
1930     src = NULL;
1931
1932     /* these may be gone, so NULL them out */
1933     src_sv = NULL;
1934     msg_sv = NULL;
1935     xfer_sv = NULL;
1936
1937     /* check for an uncaught 'die'.  If we don't do this, then Perl will longjmp()
1938      * over the GMainLoop mechanics, leaving GMainLoop in an inconsistent (locked)
1939      * state. */
1940     if (SvTRUE(ERRSV)) {
1941         /* We handle this just the way the default 'die' handler in Amanda::Debug 
1942          * does, but since Amanda's debug support may not yet be running, we back
1943          * it up with an exit() */
1944         g_critical("%s", SvPV_nolen(ERRSV));
1945         exit(1);
1946     }
1947
1948     return TRUE;
1949 }
1950
1951
1952 amglue_Source *
1953 xfer_get_amglue_source(
1954     Xfer *xfer)
1955 {
1956     return amglue_source_get(xfer_get_source(xfer),
1957         (GSourceFunc)xmsgsource_perl_callback);
1958 }
1959
1960 #ifdef __cplusplus
1961 extern "C" {
1962 #endif
1963
1964 #ifdef PERL_OBJECT
1965 #define MAGIC_CLASS _wrap_Amanda__Xfer_var::
1966 class _wrap_Amanda__Xfer_var : public CPerlObj {
1967 public:
1968 #else
1969 #define MAGIC_CLASS
1970 #endif
1971 SWIGCLASS_STATIC int swig_magic_readonly(pTHX_ SV *SWIGUNUSEDPARM(sv), MAGIC *SWIGUNUSEDPARM(mg)) {
1972     MAGIC_PPERL
1973     croak("Value is read-only.");
1974     return 0;
1975 }
1976
1977
1978 #ifdef PERL_OBJECT
1979 };
1980 #endif
1981
1982 #ifdef __cplusplus
1983 }
1984 #endif
1985
1986 #ifdef __cplusplus
1987 extern "C" {
1988 #endif
1989 XS(_wrap_xfer_new) {
1990   {
1991     XferElement **arg1 = (XferElement **) 0 ;
1992     unsigned int arg2 ;
1993     int argvi = 0;
1994     Xfer *result = 0 ;
1995     dXSARGS;
1996     
1997     if ((items < 1) || (items > 1)) {
1998       SWIG_croak("Usage: xfer_new(elementlist,nelements);");
1999     }
2000     {
2001       AV *av;
2002       unsigned int i;
2003       
2004       /* check that it's an arrayref */
2005       if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
2006         SWIG_exception(SWIG_TypeError, "Expected an arrayref");
2007       }
2008       av = (AV *)SvRV(ST(0));
2009       
2010       /* allocate memory for arg1 */
2011       arg2 = av_len(av)+1; /* av_len(av) is like $#av */
2012       arg1 = g_new(XferElement *, arg2);
2013       
2014       /* extract the underlying XferElement objects and add pointers to
2015            * them, "borrowing" the caller's references for the moment. */
2016       for (i = 0; i < arg2; i++) {
2017         SV **sv = av_fetch(av, i, 0);
2018         XferElement *elt = sv? xfer_element_from_sv(*sv):NULL;
2019         
2020         if (!elt) {
2021           SWIG_exception(SWIG_TypeError, "Expected an arrayref of Amanda::Xfer::Element objects");
2022         }
2023         arg1[i] = elt;
2024       }
2025     }
2026     result = (Xfer *)xfer_new(arg1,arg2);
2027     {
2028       ST(argvi) = sv_2mortal(new_sv_for_xfer(result));
2029       argvi++;
2030     }
2031     {
2032       /* free the element vector allocated in the (in) typemap */
2033       g_free(arg1);
2034     }
2035     {
2036       xfer_unref(result);
2037     }
2038     XSRETURN(argvi);
2039   fail:
2040     {
2041       /* free the element vector allocated in the (in) typemap */
2042       g_free(arg1);
2043     }
2044     SWIG_croak_null();
2045   }
2046 }
2047
2048
2049 XS(_wrap_xfer_unref) {
2050   {
2051     Xfer *arg1 = (Xfer *) 0 ;
2052     int argvi = 0;
2053     dXSARGS;
2054     
2055     if ((items < 1) || (items > 1)) {
2056       SWIG_croak("Usage: xfer_unref(Xfer *);");
2057     }
2058     {
2059       arg1 = xfer_from_sv(ST(0));
2060     }
2061     xfer_unref(arg1);
2062     ST(argvi) = sv_newmortal();
2063     
2064     XSRETURN(argvi);
2065   fail:
2066     
2067     SWIG_croak_null();
2068   }
2069 }
2070
2071
2072 XS(_wrap_xfer_get_status) {
2073   {
2074     Xfer *arg1 = (Xfer *) 0 ;
2075     int argvi = 0;
2076     xfer_status result;
2077     dXSARGS;
2078     
2079     if ((items < 1) || (items > 1)) {
2080       SWIG_croak("Usage: xfer_get_status(xfer);");
2081     }
2082     {
2083       arg1 = xfer_from_sv(ST(0));
2084     }
2085     result = (xfer_status)xfer_get_status(arg1);
2086     {
2087       SV *for_stack;
2088       SP += argvi; PUTBACK;
2089       for_stack = sv_2mortal(amglue_newSVi64(result));
2090       SPAGAIN; SP -= argvi;
2091       ST(argvi) = for_stack;
2092       argvi++;
2093     }
2094     
2095     XSRETURN(argvi);
2096   fail:
2097     
2098     SWIG_croak_null();
2099   }
2100 }
2101
2102
2103 XS(_wrap_xfer_repr) {
2104   {
2105     Xfer *arg1 = (Xfer *) 0 ;
2106     int argvi = 0;
2107     char *result = 0 ;
2108     dXSARGS;
2109     
2110     if ((items < 1) || (items > 1)) {
2111       SWIG_croak("Usage: xfer_repr(xfer);");
2112     }
2113     {
2114       arg1 = xfer_from_sv(ST(0));
2115     }
2116     result = (char *)xfer_repr(arg1);
2117     ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
2118     
2119     XSRETURN(argvi);
2120   fail:
2121     
2122     SWIG_croak_null();
2123   }
2124 }
2125
2126
2127 XS(_wrap_xfer_start) {
2128   {
2129     Xfer *arg1 = (Xfer *) 0 ;
2130     gint64 arg2 ;
2131     gint64 arg3 ;
2132     int argvi = 0;
2133     dXSARGS;
2134     
2135     if ((items < 3) || (items > 3)) {
2136       SWIG_croak("Usage: xfer_start(xfer,offset,size);");
2137     }
2138     {
2139       arg1 = xfer_from_sv(ST(0));
2140     }
2141     {
2142       arg2 = amglue_SvI64(ST(1));
2143     }
2144     {
2145       arg3 = amglue_SvI64(ST(2));
2146     }
2147     xfer_start(arg1,arg2,arg3);
2148     ST(argvi) = sv_newmortal();
2149     
2150     XSRETURN(argvi);
2151   fail:
2152     
2153     SWIG_croak_null();
2154   }
2155 }
2156
2157
2158 XS(_wrap_xfer_cancel) {
2159   {
2160     Xfer *arg1 = (Xfer *) 0 ;
2161     int argvi = 0;
2162     dXSARGS;
2163     
2164     if ((items < 1) || (items > 1)) {
2165       SWIG_croak("Usage: xfer_cancel(xfer);");
2166     }
2167     {
2168       arg1 = xfer_from_sv(ST(0));
2169     }
2170     xfer_cancel(arg1);
2171     ST(argvi) = sv_newmortal();
2172     
2173     XSRETURN(argvi);
2174   fail:
2175     
2176     SWIG_croak_null();
2177   }
2178 }
2179
2180
2181 XS(_wrap_xfer_element_unref) {
2182   {
2183     XferElement *arg1 = (XferElement *) 0 ;
2184     int argvi = 0;
2185     dXSARGS;
2186     
2187     if ((items < 1) || (items > 1)) {
2188       SWIG_croak("Usage: xfer_element_unref(elt);");
2189     }
2190     {
2191       arg1 = xfer_element_from_sv(ST(0));
2192     }
2193     xfer_element_unref(arg1);
2194     ST(argvi) = sv_newmortal();
2195     
2196     XSRETURN(argvi);
2197   fail:
2198     
2199     SWIG_croak_null();
2200   }
2201 }
2202
2203
2204 XS(_wrap_xfer_element_repr) {
2205   {
2206     XferElement *arg1 = (XferElement *) 0 ;
2207     int argvi = 0;
2208     char *result = 0 ;
2209     dXSARGS;
2210     
2211     if ((items < 1) || (items > 1)) {
2212       SWIG_croak("Usage: xfer_element_repr(elt);");
2213     }
2214     {
2215       arg1 = xfer_element_from_sv(ST(0));
2216     }
2217     result = (char *)xfer_element_repr(arg1);
2218     ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
2219     
2220     XSRETURN(argvi);
2221   fail:
2222     
2223     SWIG_croak_null();
2224   }
2225 }
2226
2227
2228 XS(_wrap_same_elements) {
2229   {
2230     XferElement *arg1 = (XferElement *) 0 ;
2231     XferElement *arg2 = (XferElement *) 0 ;
2232     int argvi = 0;
2233     gboolean result;
2234     dXSARGS;
2235     
2236     if ((items < 2) || (items > 2)) {
2237       SWIG_croak("Usage: same_elements(a,b);");
2238     }
2239     {
2240       arg1 = xfer_element_from_sv(ST(0));
2241     }
2242     {
2243       arg2 = xfer_element_from_sv(ST(1));
2244     }
2245     result = (gboolean)same_elements(arg1,arg2);
2246     {
2247       if (result)
2248       ST(argvi) = &PL_sv_yes;
2249       else
2250       ST(argvi) = &PL_sv_no;
2251       argvi++;
2252     }
2253     
2254     
2255     XSRETURN(argvi);
2256   fail:
2257     
2258     
2259     SWIG_croak_null();
2260   }
2261 }
2262
2263
2264 XS(_wrap_xfer_source_random) {
2265   {
2266     guint64 arg1 ;
2267     guint32 arg2 ;
2268     int argvi = 0;
2269     XferElement *result = 0 ;
2270     dXSARGS;
2271     
2272     if ((items < 2) || (items > 2)) {
2273       SWIG_croak("Usage: xfer_source_random(length,seed);");
2274     }
2275     {
2276       arg1 = amglue_SvU64(ST(0));
2277     }
2278     {
2279       arg2 = amglue_SvU32(ST(1));
2280     }
2281     result = (XferElement *)xfer_source_random(arg1,arg2);
2282     {
2283       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2284       argvi++;
2285     }
2286     {
2287       xfer_element_unref(result);
2288     }
2289     XSRETURN(argvi);
2290   fail:
2291     SWIG_croak_null();
2292   }
2293 }
2294
2295
2296 XS(_wrap_xfer_source_random_get_seed) {
2297   {
2298     XferElement *arg1 = (XferElement *) 0 ;
2299     int argvi = 0;
2300     guint32 result;
2301     dXSARGS;
2302     
2303     if ((items < 1) || (items > 1)) {
2304       SWIG_croak("Usage: xfer_source_random_get_seed(self);");
2305     }
2306     {
2307       arg1 = xfer_element_from_sv(ST(0));
2308     }
2309     result = xfer_source_random_get_seed(arg1);
2310     {
2311       SV *for_stack;
2312       SP += argvi; PUTBACK;
2313       for_stack = sv_2mortal(amglue_newSVu64(result));
2314       SPAGAIN; SP -= argvi;
2315       ST(argvi) = for_stack;
2316       argvi++;
2317     }
2318     
2319     XSRETURN(argvi);
2320   fail:
2321     
2322     SWIG_croak_null();
2323   }
2324 }
2325
2326
2327 XS(_wrap_xfer_source_pattern) {
2328   {
2329     guint64 arg1 ;
2330     void *arg2 = (void *) 0 ;
2331     size_t arg3 ;
2332     int argvi = 0;
2333     XferElement *result = 0 ;
2334     dXSARGS;
2335     
2336     if ((items < 2) || (items > 2)) {
2337       SWIG_croak("Usage: xfer_source_pattern(length,pattern,pattern_length);");
2338     }
2339     {
2340       arg1 = amglue_SvU64(ST(0));
2341     }
2342     {
2343       size_t len;
2344       char * pat;
2345       
2346       pat = SvPV(ST(1), len);
2347       arg2 = g_memdup(pat, len);
2348       arg3 = len;
2349     }
2350     result = (XferElement *)xfer_source_pattern(arg1,arg2,arg3);
2351     {
2352       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2353       argvi++;
2354     }
2355     {
2356       xfer_element_unref(result);
2357     }
2358     XSRETURN(argvi);
2359   fail:
2360     SWIG_croak_null();
2361   }
2362 }
2363
2364
2365 XS(_wrap_xfer_source_fd) {
2366   {
2367     int arg1 ;
2368     int argvi = 0;
2369     XferElement *result = 0 ;
2370     dXSARGS;
2371     
2372     if ((items < 1) || (items > 1)) {
2373       SWIG_croak("Usage: xfer_source_fd(fd);");
2374     }
2375     {
2376       IO *io = NULL;
2377       PerlIO *pio = NULL;
2378       int fd = -1;
2379       
2380       if (SvIOK(ST(0))) {
2381         /* plain old integer */
2382         arg1 = SvIV(ST(0));
2383       } else {
2384         /* try extracting as filehandle */
2385         
2386         /* note: sv_2io may call die() */
2387         io = sv_2io(ST(0));
2388         if (io) {
2389           pio = IoIFP(io);
2390         }
2391         if (pio) {
2392           fd = PerlIO_fileno(pio);
2393         }
2394         if (fd >= 0) {
2395           arg1 = fd;
2396         } else {
2397           SWIG_exception(SWIG_TypeError, "Expected integer file descriptor "
2398             "or file handle for argument 1");
2399         }
2400       }
2401     }
2402     result = (XferElement *)xfer_source_fd(arg1);
2403     {
2404       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2405       argvi++;
2406     }
2407     
2408     {
2409       xfer_element_unref(result);
2410     }
2411     XSRETURN(argvi);
2412   fail:
2413     
2414     SWIG_croak_null();
2415   }
2416 }
2417
2418
2419 XS(_wrap_xfer_source_directtcp_listen) {
2420   {
2421     int argvi = 0;
2422     XferElement *result = 0 ;
2423     dXSARGS;
2424     
2425     if ((items < 0) || (items > 0)) {
2426       SWIG_croak("Usage: xfer_source_directtcp_listen();");
2427     }
2428     result = (XferElement *)xfer_source_directtcp_listen();
2429     {
2430       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2431       argvi++;
2432     }
2433     {
2434       xfer_element_unref(result);
2435     }
2436     XSRETURN(argvi);
2437   fail:
2438     SWIG_croak_null();
2439   }
2440 }
2441
2442
2443 XS(_wrap_xfer_source_directtcp_listen_get_addrs) {
2444   {
2445     XferElement *arg1 = (XferElement *) 0 ;
2446     int argvi = 0;
2447     DirectTCPAddr *result = 0 ;
2448     dXSARGS;
2449     
2450     if ((items < 1) || (items > 1)) {
2451       SWIG_croak("Usage: xfer_source_directtcp_listen_get_addrs(elt);");
2452     }
2453     {
2454       arg1 = xfer_element_from_sv(ST(0));
2455     }
2456     result = (DirectTCPAddr *)xfer_source_directtcp_listen_get_addrs(arg1);
2457     {
2458       /* we assume this is an *array* of addresses, and return an arrayref or, if
2459            * the result is NULL, undef. */
2460       DirectTCPAddr *iter = result;
2461       AV *av;
2462       int i;
2463       
2464       i = 0;
2465       av = newAV();
2466       while (iter && SU_GET_FAMILY(iter) != 0) {
2467         char *addr = str_sockaddr_no_port(iter);
2468         AV *tuple = newAV();
2469         
2470         g_assert(NULL != av_store(tuple, 0, newSVpv(addr, 0)));
2471         g_assert(NULL != av_store(tuple, 1, newSViv(SU_GET_PORT(iter))));
2472         g_assert(NULL != av_store(av, i++, newRV_noinc((SV *)tuple)));
2473         iter++;
2474       }
2475       
2476       ST(argvi) = newRV_noinc((SV *)av);
2477       argvi++;
2478     }
2479     
2480     XSRETURN(argvi);
2481   fail:
2482     
2483     SWIG_croak_null();
2484   }
2485 }
2486
2487
2488 XS(_wrap_xfer_source_directtcp_connect) {
2489   {
2490     DirectTCPAddr *arg1 = (DirectTCPAddr *) 0 ;
2491     int argvi = 0;
2492     XferElement *result = 0 ;
2493     dXSARGS;
2494     
2495     if ((items < 1) || (items > 1)) {
2496       SWIG_croak("Usage: xfer_source_directtcp_connect(addrs);");
2497     }
2498     {
2499       AV *addrs_av;
2500       int num_addrs, i;
2501       
2502       if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
2503         SWIG_exception_fail(SWIG_TypeError, "must provide an arrayref of DirectTCPAddrs");
2504       }
2505       addrs_av = (AV *)SvRV(ST(0));
2506       num_addrs = av_len(addrs_av)+1;
2507       
2508       arg1 = g_new0(DirectTCPAddr, num_addrs+1);
2509       
2510       for (i = 0; i < num_addrs; i++) {
2511         SV **svp = av_fetch(addrs_av, i, 0);
2512         AV *addr_av;
2513         sockaddr_union addr;
2514         IV port;
2515         
2516         if (!svp || !SvROK(*svp) || SvTYPE(SvRV(*svp)) != SVt_PVAV
2517           || av_len((AV *)SvRV(*svp))+1 != 2) {
2518           SWIG_exception_fail(SWIG_TypeError, "each DirectTCPAddr must be a 2-element arrayref");
2519         }
2520         
2521         addr_av = (AV *)SvRV(*svp);
2522         
2523         /* get address */
2524         svp = av_fetch(addr_av, 0, 0);
2525         if (!svp || !SvPOK(*svp) || !str_to_sockaddr(SvPV_nolen(*svp), &addr)) {
2526           SWIG_exception_fail(SWIG_TypeError, "invalid IPv4 addr in address");
2527         }
2528         
2529         /* get port */
2530         svp = av_fetch(addr_av, 1, 0);
2531         if (!svp || !SvIOK(*svp) || (port = SvIV(*svp)) <= 0 || port >= 65536) {
2532           SWIG_exception_fail(SWIG_TypeError, "invalid port in address");
2533         }
2534         SU_SET_PORT(&addr, port);
2535         
2536         copy_sockaddr(arg1, &addr);
2537       }
2538     }
2539     result = (XferElement *)xfer_source_directtcp_connect(arg1);
2540     {
2541       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2542       argvi++;
2543     }
2544     
2545     {
2546       xfer_element_unref(result);
2547     }
2548     XSRETURN(argvi);
2549   fail:
2550     
2551     SWIG_croak_null();
2552   }
2553 }
2554
2555
2556 XS(_wrap_xfer_filter_xor) {
2557   {
2558     unsigned char arg1 ;
2559     unsigned char val1 ;
2560     int ecode1 = 0 ;
2561     int argvi = 0;
2562     XferElement *result = 0 ;
2563     dXSARGS;
2564     
2565     if ((items < 1) || (items > 1)) {
2566       SWIG_croak("Usage: xfer_filter_xor(xor_key);");
2567     }
2568     ecode1 = SWIG_AsVal_unsigned_SS_char SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
2569     if (!SWIG_IsOK(ecode1)) {
2570       SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "xfer_filter_xor" "', argument " "1"" of type '" "unsigned char""'");
2571     } 
2572     arg1 = (unsigned char)(val1);
2573     result = (XferElement *)xfer_filter_xor(arg1);
2574     {
2575       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2576       argvi++;
2577     }
2578     
2579     {
2580       xfer_element_unref(result);
2581     }
2582     XSRETURN(argvi);
2583   fail:
2584     
2585     SWIG_croak_null();
2586   }
2587 }
2588
2589
2590 XS(_wrap_xfer_filter_process) {
2591   {
2592     gchar **arg1 = (gchar **) 0 ;
2593     gboolean arg2 ;
2594     int argvi = 0;
2595     XferElement *result = 0 ;
2596     dXSARGS;
2597     
2598     if ((items < 2) || (items > 2)) {
2599       SWIG_croak("Usage: xfer_filter_process(argv,need_root);");
2600     }
2601     {
2602       AV *av;
2603       unsigned int len;
2604       unsigned int i;
2605       
2606       /* check that it's an arrayref */
2607       if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
2608         SWIG_exception(SWIG_TypeError, "Expected a non-empty arrayref");
2609       }
2610       av = (AV *)SvRV(ST(0));
2611       
2612       /* allocate memory for arg1 */
2613       len = av_len(av)+1; /* av_len(av) is like $#av */
2614       if (!len) {
2615         SWIG_exception(SWIG_TypeError, "Expected a non-empty arrayref");
2616       }
2617       arg1 = g_new0(gchar *, len+1);
2618       
2619       for (i = 0; i < len; i++) {
2620         SV **sv = av_fetch(av, i, 0);
2621         g_assert(sv != NULL);
2622         arg1[i] = g_strdup(SvPV_nolen(*sv));
2623       }
2624       
2625       /* final element is already NULL due to g_new0; xfer_filter_process takes
2626            * care of freeing this array, so we don't have to */
2627     }
2628     {
2629       arg2 = SvTRUE(ST(1));
2630     }
2631     result = (XferElement *)xfer_filter_process(arg1,arg2);
2632     {
2633       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2634       argvi++;
2635     }
2636     
2637     
2638     {
2639       xfer_element_unref(result);
2640     }
2641     XSRETURN(argvi);
2642   fail:
2643     
2644     
2645     SWIG_croak_null();
2646   }
2647 }
2648
2649
2650 XS(_wrap_get_err_fd) {
2651   {
2652     XferElement *arg1 = (XferElement *) 0 ;
2653     int argvi = 0;
2654     int result;
2655     dXSARGS;
2656     
2657     if ((items < 1) || (items > 1)) {
2658       SWIG_croak("Usage: get_err_fd(elt);");
2659     }
2660     {
2661       arg1 = xfer_element_from_sv(ST(0));
2662     }
2663     result = (int)get_err_fd(arg1);
2664     {
2665       SV *for_stack;
2666       SP += argvi; PUTBACK;
2667       for_stack = sv_2mortal(amglue_newSVi64(result));
2668       SPAGAIN; SP -= argvi;
2669       ST(argvi) = for_stack;
2670       argvi++;
2671     }
2672     
2673     XSRETURN(argvi);
2674   fail:
2675     
2676     SWIG_croak_null();
2677   }
2678 }
2679
2680
2681 XS(_wrap_xfer_dest_null) {
2682   {
2683     guint32 arg1 ;
2684     int argvi = 0;
2685     XferElement *result = 0 ;
2686     dXSARGS;
2687     
2688     if ((items < 1) || (items > 1)) {
2689       SWIG_croak("Usage: xfer_dest_null(prng_seed);");
2690     }
2691     {
2692       arg1 = amglue_SvU32(ST(0));
2693     }
2694     result = (XferElement *)xfer_dest_null(arg1);
2695     {
2696       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2697       argvi++;
2698     }
2699     {
2700       xfer_element_unref(result);
2701     }
2702     XSRETURN(argvi);
2703   fail:
2704     SWIG_croak_null();
2705   }
2706 }
2707
2708
2709 XS(_wrap_xfer_dest_buffer) {
2710   {
2711     gsize arg1 ;
2712     int argvi = 0;
2713     XferElement *result = 0 ;
2714     dXSARGS;
2715     
2716     if ((items < 1) || (items > 1)) {
2717       SWIG_croak("Usage: xfer_dest_buffer(max_size);");
2718     }
2719     {
2720       if (sizeof(gsize) == 1) {
2721         arg1 = amglue_SvU8(ST(0));
2722       } else if (sizeof(gsize) == 2) {
2723         arg1 = amglue_SvU16(ST(0));
2724       } else if (sizeof(gsize) == 4) {
2725         arg1 = amglue_SvU32(ST(0));
2726       } else if (sizeof(gsize) == 8) {
2727         arg1 = amglue_SvU64(ST(0));
2728       } else {
2729         croak("Unexpected gsize >64 bits?"); /* should be optimized out unless sizeof(gsize) > 8 */
2730       }
2731     }
2732     result = (XferElement *)xfer_dest_buffer(arg1);
2733     {
2734       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2735       argvi++;
2736     }
2737     {
2738       xfer_element_unref(result);
2739     }
2740     XSRETURN(argvi);
2741   fail:
2742     SWIG_croak_null();
2743   }
2744 }
2745
2746
2747 XS(_wrap_xfer_dest_buffer_get) {
2748   {
2749     XferElement *arg1 = (XferElement *) 0 ;
2750     gpointer *arg2 = (gpointer *) 0 ;
2751     gsize *arg3 = (gsize *) 0 ;
2752     gpointer temp2 = 0 ;
2753     gsize tempn2 ;
2754     int argvi = 0;
2755     dXSARGS;
2756     
2757     arg2 = &temp2; arg3 = &tempn2;
2758     if ((items < 1) || (items > 1)) {
2759       SWIG_croak("Usage: xfer_dest_buffer_get(elt,size);");
2760     }
2761     {
2762       arg1 = xfer_element_from_sv(ST(0));
2763     }
2764     xfer_dest_buffer_get(arg1,arg2,arg3);
2765     ST(argvi) = sv_newmortal();
2766     if (*arg2) {
2767       if (argvi >= items) EXTEND(sp,1);  ST(argvi) = SWIG_FromCharPtrAndSize(*arg2,*arg3); argvi++  ;
2768       ;
2769     }
2770     
2771     
2772     XSRETURN(argvi);
2773   fail:
2774     
2775     
2776     SWIG_croak_null();
2777   }
2778 }
2779
2780
2781 XS(_wrap_xfer_dest_fd) {
2782   {
2783     int arg1 ;
2784     int argvi = 0;
2785     XferElement *result = 0 ;
2786     dXSARGS;
2787     
2788     if ((items < 1) || (items > 1)) {
2789       SWIG_croak("Usage: xfer_dest_fd(fd);");
2790     }
2791     {
2792       IO *io = NULL;
2793       PerlIO *pio = NULL;
2794       int fd = -1;
2795       
2796       if (SvIOK(ST(0))) {
2797         /* plain old integer */
2798         arg1 = SvIV(ST(0));
2799       } else {
2800         /* try extracting as filehandle */
2801         
2802         /* note: sv_2io may call die() */
2803         io = sv_2io(ST(0));
2804         if (io) {
2805           pio = IoIFP(io);
2806         }
2807         if (pio) {
2808           fd = PerlIO_fileno(pio);
2809         }
2810         if (fd >= 0) {
2811           arg1 = fd;
2812         } else {
2813           SWIG_exception(SWIG_TypeError, "Expected integer file descriptor "
2814             "or file handle for argument 1");
2815         }
2816       }
2817     }
2818     result = (XferElement *)xfer_dest_fd(arg1);
2819     {
2820       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2821       argvi++;
2822     }
2823     
2824     {
2825       xfer_element_unref(result);
2826     }
2827     XSRETURN(argvi);
2828   fail:
2829     
2830     SWIG_croak_null();
2831   }
2832 }
2833
2834
2835 XS(_wrap_xfer_dest_directtcp_listen) {
2836   {
2837     int argvi = 0;
2838     XferElement *result = 0 ;
2839     dXSARGS;
2840     
2841     if ((items < 0) || (items > 0)) {
2842       SWIG_croak("Usage: xfer_dest_directtcp_listen();");
2843     }
2844     result = (XferElement *)xfer_dest_directtcp_listen();
2845     {
2846       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2847       argvi++;
2848     }
2849     {
2850       xfer_element_unref(result);
2851     }
2852     XSRETURN(argvi);
2853   fail:
2854     SWIG_croak_null();
2855   }
2856 }
2857
2858
2859 XS(_wrap_xfer_dest_directtcp_listen_get_addrs) {
2860   {
2861     XferElement *arg1 = (XferElement *) 0 ;
2862     int argvi = 0;
2863     DirectTCPAddr *result = 0 ;
2864     dXSARGS;
2865     
2866     if ((items < 1) || (items > 1)) {
2867       SWIG_croak("Usage: xfer_dest_directtcp_listen_get_addrs(elt);");
2868     }
2869     {
2870       arg1 = xfer_element_from_sv(ST(0));
2871     }
2872     result = (DirectTCPAddr *)xfer_dest_directtcp_listen_get_addrs(arg1);
2873     {
2874       /* we assume this is an *array* of addresses, and return an arrayref or, if
2875            * the result is NULL, undef. */
2876       DirectTCPAddr *iter = result;
2877       AV *av;
2878       int i;
2879       
2880       i = 0;
2881       av = newAV();
2882       while (iter && SU_GET_FAMILY(iter) != 0) {
2883         char *addr = str_sockaddr_no_port(iter);
2884         AV *tuple = newAV();
2885         
2886         g_assert(NULL != av_store(tuple, 0, newSVpv(addr, 0)));
2887         g_assert(NULL != av_store(tuple, 1, newSViv(SU_GET_PORT(iter))));
2888         g_assert(NULL != av_store(av, i++, newRV_noinc((SV *)tuple)));
2889         iter++;
2890       }
2891       
2892       ST(argvi) = newRV_noinc((SV *)av);
2893       argvi++;
2894     }
2895     
2896     XSRETURN(argvi);
2897   fail:
2898     
2899     SWIG_croak_null();
2900   }
2901 }
2902
2903
2904 XS(_wrap_xfer_dest_directtcp_connect) {
2905   {
2906     DirectTCPAddr *arg1 = (DirectTCPAddr *) 0 ;
2907     int argvi = 0;
2908     XferElement *result = 0 ;
2909     dXSARGS;
2910     
2911     if ((items < 1) || (items > 1)) {
2912       SWIG_croak("Usage: xfer_dest_directtcp_connect(addrs);");
2913     }
2914     {
2915       AV *addrs_av;
2916       int num_addrs, i;
2917       
2918       if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
2919         SWIG_exception_fail(SWIG_TypeError, "must provide an arrayref of DirectTCPAddrs");
2920       }
2921       addrs_av = (AV *)SvRV(ST(0));
2922       num_addrs = av_len(addrs_av)+1;
2923       
2924       arg1 = g_new0(DirectTCPAddr, num_addrs+1);
2925       
2926       for (i = 0; i < num_addrs; i++) {
2927         SV **svp = av_fetch(addrs_av, i, 0);
2928         AV *addr_av;
2929         sockaddr_union addr;
2930         IV port;
2931         
2932         if (!svp || !SvROK(*svp) || SvTYPE(SvRV(*svp)) != SVt_PVAV
2933           || av_len((AV *)SvRV(*svp))+1 != 2) {
2934           SWIG_exception_fail(SWIG_TypeError, "each DirectTCPAddr must be a 2-element arrayref");
2935         }
2936         
2937         addr_av = (AV *)SvRV(*svp);
2938         
2939         /* get address */
2940         svp = av_fetch(addr_av, 0, 0);
2941         if (!svp || !SvPOK(*svp) || !str_to_sockaddr(SvPV_nolen(*svp), &addr)) {
2942           SWIG_exception_fail(SWIG_TypeError, "invalid IPv4 addr in address");
2943         }
2944         
2945         /* get port */
2946         svp = av_fetch(addr_av, 1, 0);
2947         if (!svp || !SvIOK(*svp) || (port = SvIV(*svp)) <= 0 || port >= 65536) {
2948           SWIG_exception_fail(SWIG_TypeError, "invalid port in address");
2949         }
2950         SU_SET_PORT(&addr, port);
2951         
2952         copy_sockaddr(arg1, &addr);
2953       }
2954     }
2955     result = (XferElement *)xfer_dest_directtcp_connect(arg1);
2956     {
2957       ST(argvi) = sv_2mortal(new_sv_for_xfer_element(result));
2958       argvi++;
2959     }
2960     
2961     {
2962       xfer_element_unref(result);
2963     }
2964     XSRETURN(argvi);
2965   fail:
2966     
2967     SWIG_croak_null();
2968   }
2969 }
2970
2971
2972 XS(_wrap_xfer_get_amglue_source) {
2973   {
2974     Xfer *arg1 = (Xfer *) 0 ;
2975     int argvi = 0;
2976     amglue_Source *result = 0 ;
2977     dXSARGS;
2978     
2979     if ((items < 1) || (items > 1)) {
2980       SWIG_croak("Usage: xfer_get_amglue_source(xfer);");
2981     }
2982     {
2983       arg1 = xfer_from_sv(ST(0));
2984     }
2985     result = (amglue_Source *)xfer_get_amglue_source(arg1);
2986     ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_amglue_Source, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
2987     
2988     XSRETURN(argvi);
2989   fail:
2990     
2991     SWIG_croak_null();
2992   }
2993 }
2994
2995
2996
2997 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
2998
2999 static swig_type_info _swigt__p_DirectTCPAddr = {"_p_DirectTCPAddr", "DirectTCPAddr *", 0, 0, (void*)0, 0};
3000 static swig_type_info _swigt__p_Xfer = {"_p_Xfer", "Xfer *", 0, 0, (void*)0, 0};
3001 static swig_type_info _swigt__p_XferElement = {"_p_XferElement", "XferElement *", 0, 0, (void*)0, 0};
3002 static swig_type_info _swigt__p_amglue_Source = {"_p_amglue_Source", "struct amglue_Source *|amglue_Source *", 0, 0, (void*)"Amanda::MainLoop::Source", 0};
3003 static swig_type_info _swigt__p_char = {"_p_char", "gchar *|char *", 0, 0, (void*)0, 0};
3004 static swig_type_info _swigt__p_double = {"_p_double", "double *|gdouble *", 0, 0, (void*)0, 0};
3005 static swig_type_info _swigt__p_float = {"_p_float", "float *|gfloat *", 0, 0, (void*)0, 0};
3006 static swig_type_info _swigt__p_gint64 = {"_p_gint64", "gint64 *", 0, 0, (void*)0, 0};
3007 static swig_type_info _swigt__p_gsize = {"_p_gsize", "gsize *", 0, 0, (void*)0, 0};
3008 static swig_type_info _swigt__p_guint32 = {"_p_guint32", "guint32 *", 0, 0, (void*)0, 0};
3009 static swig_type_info _swigt__p_guint64 = {"_p_guint64", "guint64 *", 0, 0, (void*)0, 0};
3010 static swig_type_info _swigt__p_int = {"_p_int", "xmsg_type *|int *|GIOCondition *|xfer_status *|gboolean *", 0, 0, (void*)0, 0};
3011 static swig_type_info _swigt__p_p_XferElement = {"_p_p_XferElement", "XferElement **", 0, 0, (void*)0, 0};
3012 static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **|gchar **", 0, 0, (void*)0, 0};
3013 static swig_type_info _swigt__p_p_void = {"_p_p_void", "gpointer *|void **", 0, 0, (void*)0, 0};
3014 static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "guchar *|unsigned char *", 0, 0, (void*)0, 0};
3015
3016 static swig_type_info *swig_type_initial[] = {
3017   &_swigt__p_DirectTCPAddr,
3018   &_swigt__p_Xfer,
3019   &_swigt__p_XferElement,
3020   &_swigt__p_amglue_Source,
3021   &_swigt__p_char,
3022   &_swigt__p_double,
3023   &_swigt__p_float,
3024   &_swigt__p_gint64,
3025   &_swigt__p_gsize,
3026   &_swigt__p_guint32,
3027   &_swigt__p_guint64,
3028   &_swigt__p_int,
3029   &_swigt__p_p_XferElement,
3030   &_swigt__p_p_char,
3031   &_swigt__p_p_void,
3032   &_swigt__p_unsigned_char,
3033 };
3034
3035 static swig_cast_info _swigc__p_DirectTCPAddr[] = {  {&_swigt__p_DirectTCPAddr, 0, 0, 0},{0, 0, 0, 0}};
3036 static swig_cast_info _swigc__p_Xfer[] = {  {&_swigt__p_Xfer, 0, 0, 0},{0, 0, 0, 0}};
3037 static swig_cast_info _swigc__p_XferElement[] = {  {&_swigt__p_XferElement, 0, 0, 0},{0, 0, 0, 0}};
3038 static swig_cast_info _swigc__p_amglue_Source[] = {  {&_swigt__p_amglue_Source, 0, 0, 0},{0, 0, 0, 0}};
3039 static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
3040 static swig_cast_info _swigc__p_double[] = {  {&_swigt__p_double, 0, 0, 0},{0, 0, 0, 0}};
3041 static swig_cast_info _swigc__p_float[] = {  {&_swigt__p_float, 0, 0, 0},{0, 0, 0, 0}};
3042 static swig_cast_info _swigc__p_gint64[] = {  {&_swigt__p_gint64, 0, 0, 0},{0, 0, 0, 0}};
3043 static swig_cast_info _swigc__p_gsize[] = {  {&_swigt__p_gsize, 0, 0, 0},{0, 0, 0, 0}};
3044 static swig_cast_info _swigc__p_guint32[] = {  {&_swigt__p_guint32, 0, 0, 0},{0, 0, 0, 0}};
3045 static swig_cast_info _swigc__p_guint64[] = {  {&_swigt__p_guint64, 0, 0, 0},{0, 0, 0, 0}};
3046 static swig_cast_info _swigc__p_int[] = {  {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
3047 static swig_cast_info _swigc__p_p_XferElement[] = {  {&_swigt__p_p_XferElement, 0, 0, 0},{0, 0, 0, 0}};
3048 static swig_cast_info _swigc__p_p_char[] = {  {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
3049 static swig_cast_info _swigc__p_p_void[] = {  {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}};
3050 static swig_cast_info _swigc__p_unsigned_char[] = {  {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
3051
3052 static swig_cast_info *swig_cast_initial[] = {
3053   _swigc__p_DirectTCPAddr,
3054   _swigc__p_Xfer,
3055   _swigc__p_XferElement,
3056   _swigc__p_amglue_Source,
3057   _swigc__p_char,
3058   _swigc__p_double,
3059   _swigc__p_float,
3060   _swigc__p_gint64,
3061   _swigc__p_gsize,
3062   _swigc__p_guint32,
3063   _swigc__p_guint64,
3064   _swigc__p_int,
3065   _swigc__p_p_XferElement,
3066   _swigc__p_p_char,
3067   _swigc__p_p_void,
3068   _swigc__p_unsigned_char,
3069 };
3070
3071
3072 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
3073
3074 static swig_constant_info swig_constants[] = {
3075 {0,0,0,0,0,0}
3076 };
3077 #ifdef __cplusplus
3078 }
3079 #endif
3080 static swig_variable_info swig_variables[] = {
3081 {0,0,0,0}
3082 };
3083 static swig_command_info swig_commands[] = {
3084 {"Amanda::Xferc::xfer_new", _wrap_xfer_new},
3085 {"Amanda::Xferc::xfer_unref", _wrap_xfer_unref},
3086 {"Amanda::Xferc::xfer_get_status", _wrap_xfer_get_status},
3087 {"Amanda::Xferc::xfer_repr", _wrap_xfer_repr},
3088 {"Amanda::Xferc::xfer_start", _wrap_xfer_start},
3089 {"Amanda::Xferc::xfer_cancel", _wrap_xfer_cancel},
3090 {"Amanda::Xferc::xfer_element_unref", _wrap_xfer_element_unref},
3091 {"Amanda::Xferc::xfer_element_repr", _wrap_xfer_element_repr},
3092 {"Amanda::Xferc::same_elements", _wrap_same_elements},
3093 {"Amanda::Xferc::xfer_source_random", _wrap_xfer_source_random},
3094 {"Amanda::Xferc::xfer_source_random_get_seed", _wrap_xfer_source_random_get_seed},
3095 {"Amanda::Xferc::xfer_source_pattern", _wrap_xfer_source_pattern},
3096 {"Amanda::Xferc::xfer_source_fd", _wrap_xfer_source_fd},
3097 {"Amanda::Xferc::xfer_source_directtcp_listen", _wrap_xfer_source_directtcp_listen},
3098 {"Amanda::Xferc::xfer_source_directtcp_listen_get_addrs", _wrap_xfer_source_directtcp_listen_get_addrs},
3099 {"Amanda::Xferc::xfer_source_directtcp_connect", _wrap_xfer_source_directtcp_connect},
3100 {"Amanda::Xferc::xfer_filter_xor", _wrap_xfer_filter_xor},
3101 {"Amanda::Xferc::xfer_filter_process", _wrap_xfer_filter_process},
3102 {"Amanda::Xferc::get_err_fd", _wrap_get_err_fd},
3103 {"Amanda::Xferc::xfer_dest_null", _wrap_xfer_dest_null},
3104 {"Amanda::Xferc::xfer_dest_buffer", _wrap_xfer_dest_buffer},
3105 {"Amanda::Xferc::xfer_dest_buffer_get", _wrap_xfer_dest_buffer_get},
3106 {"Amanda::Xferc::xfer_dest_fd", _wrap_xfer_dest_fd},
3107 {"Amanda::Xferc::xfer_dest_directtcp_listen", _wrap_xfer_dest_directtcp_listen},
3108 {"Amanda::Xferc::xfer_dest_directtcp_listen_get_addrs", _wrap_xfer_dest_directtcp_listen_get_addrs},
3109 {"Amanda::Xferc::xfer_dest_directtcp_connect", _wrap_xfer_dest_directtcp_connect},
3110 {"Amanda::Xferc::xfer_get_amglue_source", _wrap_xfer_get_amglue_source},
3111 {0,0}
3112 };
3113 /* -----------------------------------------------------------------------------
3114  * Type initialization:
3115  * This problem is tough by the requirement that no dynamic 
3116  * memory is used. Also, since swig_type_info structures store pointers to 
3117  * swig_cast_info structures and swig_cast_info structures store pointers back
3118  * to swig_type_info structures, we need some lookup code at initialization. 
3119  * The idea is that swig generates all the structures that are needed. 
3120  * The runtime then collects these partially filled structures. 
3121  * The SWIG_InitializeModule function takes these initial arrays out of 
3122  * swig_module, and does all the lookup, filling in the swig_module.types
3123  * array with the correct data and linking the correct swig_cast_info
3124  * structures together.
3125  *
3126  * The generated swig_type_info structures are assigned staticly to an initial 
3127  * array. We just loop through that array, and handle each type individually.
3128  * First we lookup if this type has been already loaded, and if so, use the
3129  * loaded structure instead of the generated one. Then we have to fill in the
3130  * cast linked list. The cast data is initially stored in something like a
3131  * two-dimensional array. Each row corresponds to a type (there are the same
3132  * number of rows as there are in the swig_type_initial array). Each entry in
3133  * a column is one of the swig_cast_info structures for that type.
3134  * The cast_initial array is actually an array of arrays, because each row has
3135  * a variable number of columns. So to actually build the cast linked list,
3136  * we find the array of casts associated with the type, and loop through it 
3137  * adding the casts to the list. The one last trick we need to do is making
3138  * sure the type pointer in the swig_cast_info struct is correct.
3139  *
3140  * First off, we lookup the cast->type name to see if it is already loaded. 
3141  * There are three cases to handle:
3142  *  1) If the cast->type has already been loaded AND the type we are adding
3143  *     casting info to has not been loaded (it is in this module), THEN we
3144  *     replace the cast->type pointer with the type pointer that has already
3145  *     been loaded.
3146  *  2) If BOTH types (the one we are adding casting info to, and the 
3147  *     cast->type) are loaded, THEN the cast info has already been loaded by
3148  *     the previous module so we just ignore it.
3149  *  3) Finally, if cast->type has not already been loaded, then we add that
3150  *     swig_cast_info to the linked list (because the cast->type) pointer will
3151  *     be correct.
3152  * ----------------------------------------------------------------------------- */
3153
3154 #ifdef __cplusplus
3155 extern "C" {
3156 #if 0
3157 } /* c-mode */
3158 #endif
3159 #endif
3160
3161 #if 0
3162 #define SWIGRUNTIME_DEBUG
3163 #endif
3164
3165
3166 SWIGRUNTIME void
3167 SWIG_InitializeModule(void *clientdata) {
3168   size_t i;
3169   swig_module_info *module_head, *iter;
3170   int found, init;
3171   
3172   clientdata = clientdata;
3173   
3174   /* check to see if the circular list has been setup, if not, set it up */
3175   if (swig_module.next==0) {
3176     /* Initialize the swig_module */
3177     swig_module.type_initial = swig_type_initial;
3178     swig_module.cast_initial = swig_cast_initial;
3179     swig_module.next = &swig_module;
3180     init = 1;
3181   } else {
3182     init = 0;
3183   }
3184   
3185   /* Try and load any already created modules */
3186   module_head = SWIG_GetModule(clientdata);
3187   if (!module_head) {
3188     /* This is the first module loaded for this interpreter */
3189     /* so set the swig module into the interpreter */
3190     SWIG_SetModule(clientdata, &swig_module);
3191     module_head = &swig_module;
3192   } else {
3193     /* the interpreter has loaded a SWIG module, but has it loaded this one? */
3194     found=0;
3195     iter=module_head;
3196     do {
3197       if (iter==&swig_module) {
3198         found=1;
3199         break;
3200       }
3201       iter=iter->next;
3202     } while (iter!= module_head);
3203     
3204     /* if the is found in the list, then all is done and we may leave */
3205     if (found) return;
3206     /* otherwise we must add out module into the list */
3207     swig_module.next = module_head->next;
3208     module_head->next = &swig_module;
3209   }
3210   
3211   /* When multiple interpeters are used, a module could have already been initialized in
3212        a different interpreter, but not yet have a pointer in this interpreter.
3213        In this case, we do not want to continue adding types... everything should be
3214        set up already */
3215   if (init == 0) return;
3216   
3217   /* Now work on filling in swig_module.types */
3218 #ifdef SWIGRUNTIME_DEBUG
3219   printf("SWIG_InitializeModule: size %d\n", swig_module.size);
3220 #endif
3221   for (i = 0; i < swig_module.size; ++i) {
3222     swig_type_info *type = 0;
3223     swig_type_info *ret;
3224     swig_cast_info *cast;
3225     
3226 #ifdef SWIGRUNTIME_DEBUG
3227     printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
3228 #endif
3229     
3230     /* if there is another module already loaded */
3231     if (swig_module.next != &swig_module) {
3232       type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
3233     }
3234     if (type) {
3235       /* Overwrite clientdata field */
3236 #ifdef SWIGRUNTIME_DEBUG
3237       printf("SWIG_InitializeModule: found type %s\n", type->name);
3238 #endif
3239       if (swig_module.type_initial[i]->clientdata) {
3240         type->clientdata = swig_module.type_initial[i]->clientdata;
3241 #ifdef SWIGRUNTIME_DEBUG
3242         printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
3243 #endif
3244       }
3245     } else {
3246       type = swig_module.type_initial[i];
3247     }
3248     
3249     /* Insert casting types */
3250     cast = swig_module.cast_initial[i];
3251     while (cast->type) {
3252       /* Don't need to add information already in the list */
3253       ret = 0;
3254 #ifdef SWIGRUNTIME_DEBUG
3255       printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
3256 #endif
3257       if (swig_module.next != &swig_module) {
3258         ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
3259 #ifdef SWIGRUNTIME_DEBUG
3260         if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
3261 #endif
3262       }
3263       if (ret) {
3264         if (type == swig_module.type_initial[i]) {
3265 #ifdef SWIGRUNTIME_DEBUG
3266           printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
3267 #endif
3268           cast->type = ret;
3269           ret = 0;
3270         } else {
3271           /* Check for casting already in the list */
3272           swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
3273 #ifdef SWIGRUNTIME_DEBUG
3274           if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
3275 #endif
3276           if (!ocast) ret = 0;
3277         }
3278       }
3279       
3280       if (!ret) {
3281 #ifdef SWIGRUNTIME_DEBUG
3282         printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
3283 #endif
3284         if (type->cast) {
3285           type->cast->prev = cast;
3286           cast->next = type->cast;
3287         }
3288         type->cast = cast;
3289       }
3290       cast++;
3291     }
3292     /* Set entry in modules->types array equal to the type */
3293     swig_module.types[i] = type;
3294   }
3295   swig_module.types[i] = 0;
3296   
3297 #ifdef SWIGRUNTIME_DEBUG
3298   printf("**** SWIG_InitializeModule: Cast List ******\n");
3299   for (i = 0; i < swig_module.size; ++i) {
3300     int j = 0;
3301     swig_cast_info *cast = swig_module.cast_initial[i];
3302     printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
3303     while (cast->type) {
3304       printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
3305       cast++;
3306       ++j;
3307     }
3308     printf("---- Total casts: %d\n",j);
3309   }
3310   printf("**** SWIG_InitializeModule: Cast List ******\n");
3311 #endif
3312 }
3313
3314 /* This function will propagate the clientdata field of type to
3315 * any new swig_type_info structures that have been added into the list
3316 * of equivalent types.  It is like calling
3317 * SWIG_TypeClientData(type, clientdata) a second time.
3318 */
3319 SWIGRUNTIME void
3320 SWIG_PropagateClientData(void) {
3321   size_t i;
3322   swig_cast_info *equiv;
3323   static int init_run = 0;
3324   
3325   if (init_run) return;
3326   init_run = 1;
3327   
3328   for (i = 0; i < swig_module.size; i++) {
3329     if (swig_module.types[i]->clientdata) {
3330       equiv = swig_module.types[i]->cast;
3331       while (equiv) {
3332         if (!equiv->converter) {
3333           if (equiv->type && !equiv->type->clientdata)
3334           SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
3335         }
3336         equiv = equiv->next;
3337       }
3338     }
3339   }
3340 }
3341
3342 #ifdef __cplusplus
3343 #if 0
3344 {
3345   /* c-mode */
3346 #endif
3347 }
3348 #endif
3349
3350
3351
3352 #ifdef __cplusplus
3353 extern "C"
3354 #endif
3355
3356 XS(SWIG_init) {
3357   dXSARGS;
3358   int i;
3359   
3360   SWIG_InitializeModule(0);
3361   
3362   /* Install commands */
3363   for (i = 0; swig_commands[i].name; i++) {
3364     newXS((char*) swig_commands[i].name,swig_commands[i].wrapper, (char*)__FILE__);
3365   }
3366   
3367   /* Install variables */
3368   for (i = 0; swig_variables[i].name; i++) {
3369     SV *sv;
3370     sv = get_sv((char*) swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI);
3371     if (swig_variables[i].type) {
3372       SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0);
3373     } else {
3374       sv_setiv(sv,(IV) 0);
3375     }
3376     swig_create_magic(sv, (char *) swig_variables[i].name, swig_variables[i].set, swig_variables[i].get); 
3377   }
3378   
3379   /* Install constant */
3380   for (i = 0; swig_constants[i].type; i++) {
3381     SV *sv;
3382     sv = get_sv((char*)swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI);
3383     switch(swig_constants[i].type) {
3384     case SWIG_INT:
3385       sv_setiv(sv, (IV) swig_constants[i].lvalue);
3386       break;
3387     case SWIG_FLOAT:
3388       sv_setnv(sv, (double) swig_constants[i].dvalue);
3389       break;
3390     case SWIG_STRING:
3391       sv_setpv(sv, (char *) swig_constants[i].pvalue);
3392       break;
3393     case SWIG_POINTER:
3394       SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0);
3395       break;
3396     case SWIG_BINARY:
3397       SWIG_MakePackedObj(sv, swig_constants[i].pvalue, swig_constants[i].lvalue, *(swig_constants[i].ptype));
3398       break;
3399     default:
3400       break;
3401     }
3402     SvREADONLY_on(sv);
3403   }
3404   
3405   
3406   /* We need GType and GThread initialized to use xfers */
3407   glib_init();
3408   
3409   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3410     SV *sv = get_sv((char*) SWIG_prefix "XFER_INIT", TRUE | 0x2 | GV_ADDMULTI);
3411     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XFER_INIT)));
3412     SvREADONLY_on(sv);
3413   } while(0) /*@SWIG@*/;
3414   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3415     SV *sv = get_sv((char*) SWIG_prefix "XFER_START", TRUE | 0x2 | GV_ADDMULTI);
3416     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XFER_START)));
3417     SvREADONLY_on(sv);
3418   } while(0) /*@SWIG@*/;
3419   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3420     SV *sv = get_sv((char*) SWIG_prefix "XFER_RUNNING", TRUE | 0x2 | GV_ADDMULTI);
3421     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XFER_RUNNING)));
3422     SvREADONLY_on(sv);
3423   } while(0) /*@SWIG@*/;
3424   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3425     SV *sv = get_sv((char*) SWIG_prefix "XFER_DONE", TRUE | 0x2 | GV_ADDMULTI);
3426     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XFER_DONE)));
3427     SvREADONLY_on(sv);
3428   } while(0) /*@SWIG@*/;
3429   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3430     SV *sv = get_sv((char*) SWIG_prefix "XMSG_INFO", TRUE | 0x2 | GV_ADDMULTI);
3431     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XMSG_INFO)));
3432     SvREADONLY_on(sv);
3433   } while(0) /*@SWIG@*/;
3434   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3435     SV *sv = get_sv((char*) SWIG_prefix "XMSG_ERROR", TRUE | 0x2 | GV_ADDMULTI);
3436     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XMSG_ERROR)));
3437     SvREADONLY_on(sv);
3438   } while(0) /*@SWIG@*/;
3439   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3440     SV *sv = get_sv((char*) SWIG_prefix "XMSG_DONE", TRUE | 0x2 | GV_ADDMULTI);
3441     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XMSG_DONE)));
3442     SvREADONLY_on(sv);
3443   } while(0) /*@SWIG@*/;
3444   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3445     SV *sv = get_sv((char*) SWIG_prefix "XMSG_CANCEL", TRUE | 0x2 | GV_ADDMULTI);
3446     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XMSG_CANCEL)));
3447     SvREADONLY_on(sv);
3448   } while(0) /*@SWIG@*/;
3449   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3450     SV *sv = get_sv((char*) SWIG_prefix "XMSG_PART_DONE", TRUE | 0x2 | GV_ADDMULTI);
3451     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XMSG_PART_DONE)));
3452     SvREADONLY_on(sv);
3453   } while(0) /*@SWIG@*/;
3454   /*@SWIG:/usr/share/swig/1.3.39/perl5/perltypemaps.swg,65,%set_constant@*/ do {
3455     SV *sv = get_sv((char*) SWIG_prefix "XMSG_READY", TRUE | 0x2 | GV_ADDMULTI);
3456     sv_setsv(sv, SWIG_From_int  SWIG_PERL_CALL_ARGS_1((int)(XMSG_READY)));
3457     SvREADONLY_on(sv);
3458   } while(0) /*@SWIG@*/;
3459   ST(0) = &PL_sv_yes;
3460   XSRETURN(1);
3461 }
3462