save 168 bytes per zaptel channel private structure (using bitfields)
authorKevin P. Fleming <kpfleming@digium.com>
Tue, 7 Jun 2005 21:13:35 +0000 (21:13 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Tue, 7 Jun 2005 21:13:35 +0000 (21:13 +0000)
save 28 bytes per zaptel subchannel structure (using bitfields)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5878 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_zap.c

index 1fa4d4a..c46dce2 100755 (executable)
@@ -368,42 +368,42 @@ static int r2prot = -1;
 struct zt_pri {
        pthread_t master;                                               /* Thread of master */
        ast_mutex_t lock;                                               /* Mutex */
-       char idleext[AST_MAX_EXTENSION];                /* Where to idle extra calls */
-       char idlecontext[AST_MAX_EXTENSION];    /* What context to use for idle */
-       char idledial[AST_MAX_EXTENSION];               /* What to dial before dumping */
+       char idleext[AST_MAX_EXTENSION];                                /* Where to idle extra calls */
+       char idlecontext[AST_MAX_EXTENSION];                            /* What context to use for idle */
+       char idledial[AST_MAX_EXTENSION];                               /* What to dial before dumping */
        int minunused;                                                  /* Min # of channels to keep empty */
        int minidle;                                                    /* Min # of "idling" calls to keep active */
        int nodetype;                                                   /* Node type */
        int switchtype;                                                 /* Type of switch to emulate */
-       int nsf;                                                                /* Network-Specific Facilities */
+       int nsf;                                                        /* Network-Specific Facilities */
        int dialplan;                                                   /* Dialing plan */
        int localdialplan;                                              /* Local dialing plan */
-       char internationalprefix[10];                   /* country access code ('00' for european dialplans) */
-       char nationalprefix[10];                                /* area access code ('0' for european dialplans) */
-       char localprefix[20];                                   /* area access code + area code ('0'+area code for european dialplans) */
-       char privateprefix[20];                                 /* for private dialplans */
-       char unknownprefix[20];                                 /* for unknown dialplans */
-       int dchannels[NUM_DCHANS];                              /* What channel are the dchannels on */
+       char internationalprefix[10];                                   /* country access code ('00' for european dialplans) */
+       char nationalprefix[10];                                        /* area access code ('0' for european dialplans) */
+       char localprefix[20];                                           /* area access code + area code ('0'+area code for european dialplans) */
+       char privateprefix[20];                                         /* for private dialplans */
+       char unknownprefix[20];                                         /* for unknown dialplans */
+       int dchannels[NUM_DCHANS];                                      /* What channel are the dchannels on */
        int trunkgroup;                                                 /* What our trunkgroup is */
-       int mastertrunkgroup;                                   /* What trunk group is our master */
+       int mastertrunkgroup;                                           /* What trunk group is our master */
        int prilogicalspan;                                             /* Logical span number within trunk group */
        int numchans;                                                   /* Num of channels we represent */
        int overlapdial;                                                /* In overlap dialing mode */
        int facilityenable;                                             /* Enable facility IEs */
-       struct pri *dchans[NUM_DCHANS];                 /* Actual d-channels */
-       int dchanavail[NUM_DCHANS];                             /* Whether each channel is available */
+       struct pri *dchans[NUM_DCHANS];                                 /* Actual d-channels */
+       int dchanavail[NUM_DCHANS];                                     /* Whether each channel is available */
        struct pri *pri;                                                /* Currently active D-channel */
        int debug;
-       int fds[NUM_DCHANS];                                    /* FD's for d-channels */
+       int fds[NUM_DCHANS];                                            /* FD's for d-channels */
        int offset;
        int span;
        int resetting;
        int resetpos;
        time_t lastreset;                                               /* time when unused channels were last reset */
        long resetinterval;                                             /* Interval (in seconds) for resetting unused channels */
-       struct zt_pvt *pvts[MAX_CHANNELS];              /* Member channel pvt structs */
-       struct zt_pvt *crvs;                                    /* Member CRV structs */
-       struct zt_pvt *crvend;                                  /* Pointer to end of CRV structs */
+       struct zt_pvt *pvts[MAX_CHANNELS];                              /* Member channel pvt structs */
+       struct zt_pvt *crvs;                                            /* Member CRV structs */
+       struct zt_pvt *crvend;                                          /* Pointer to end of CRV structs */
 };
 
 
@@ -466,14 +466,14 @@ struct zt_subchannel {
        int chan;
        short buffer[AST_FRIENDLY_OFFSET/2 + READ_SIZE];
        struct ast_frame f;             /* One frame for each channel.  How did this ever work before? */
-       int needringing;
-       int needbusy;
-       int needcongestion;
-       int needcallerid;
-       int needanswer;
-       int needflash;
-       int linear;
-       int inthreeway;
+       unsigned int needringing:1;
+       unsigned int needbusy:1;
+       unsigned int needcongestion:1;
+       unsigned int needcallerid:1;
+       unsigned int needanswer:1;
+       unsigned int needflash:1;
+       unsigned int linear:1;
+       unsigned int inthreeway:1;
        ZT_CONFINFO curconf;
 };
 
@@ -484,28 +484,80 @@ struct zt_subchannel {
 
 static struct zt_pvt {
        ast_mutex_t lock;
-       struct ast_channel *owner;      /* Our current active owner (if applicable) */
-               /* Up to three channels can be associated with this call */
+       struct ast_channel *owner;                      /* Our current active owner (if applicable) */
+                                                       /* Up to three channels can be associated with this call */
                
-       struct zt_subchannel sub_unused;        /* Just a safety precaution */
-       struct zt_subchannel subs[3];   /* Sub-channels */
-       struct zt_confinfo saveconf;    /* Saved conference info */
+       struct zt_subchannel sub_unused;                /* Just a safety precaution */
+       struct zt_subchannel subs[3];                   /* Sub-channels */
+       struct zt_confinfo saveconf;                    /* Saved conference info */
 
-       struct zt_pvt *slaves[MAX_SLAVES];      /* Slave to us (follows our conferencing) */
-       struct zt_pvt *master;  /* Master to us (we follow their conferencing) */
-       int inconference;               /* If our real should be in the conference */
+       struct zt_pvt *slaves[MAX_SLAVES];              /* Slave to us (follows our conferencing) */
+       struct zt_pvt *master;                          /* Master to us (we follow their conferencing) */
+       int inconference;                               /* If our real should be in the conference */
        
        int sig;                                        /* Signalling style */
-       int radio;                              /* radio type */
-       int firstradio;                         /* first radio flag */
+       int radio;                                      /* radio type */
        float rxgain;
        float txgain;
-       int tonezone;                           /* tone zone for this chan, or -1 for default */
-       struct zt_pvt *next;                    /* Next channel in list */
-       struct zt_pvt *prev;                    /* Prev channel in list */
+       int tonezone;                                   /* tone zone for this chan, or -1 for default */
+       struct zt_pvt *next;                            /* Next channel in list */
+       struct zt_pvt *prev;                            /* Prev channel in list */
+
+       /* flags */
+       unsigned int adsi:1;
+       unsigned int answeronpolarityswitch:1;
+       unsigned int busydetect:1;
+       unsigned int callreturn:1;
+       unsigned int callwaiting:1;
+       unsigned int callwaitingcallerid:1;
+       unsigned int cancallforward:1;
+       unsigned int canpark:1;
+       unsigned int confirmanswer:1;                   /* Wait for '#' to confirm answer */
+       unsigned int destroy:1;
+       unsigned int didtdd:1;                          /* flag to say its done it once */
+       unsigned int dialednone:1;
+       unsigned int dialing:1;
+       unsigned int digital:1;
+       unsigned int dnd:1;
+       unsigned int echobreak:1;
+       unsigned int echocanbridged:1;
+       unsigned int echocanon:1;
+       unsigned int faxhandled:1;                      /* Has a fax tone already been handled? */
+       unsigned int firstradio:1;
+       unsigned int hanguponpolarityswitch:1;
+       unsigned int hidecallerid;
+       unsigned int ignoredtmf:1;
+       unsigned int immediate:1;                       /* Answer before getting digits? */
+       unsigned int inalarm:1;
+       unsigned int mate:1;                            /* flag to say its in MATE mode */
+       unsigned int outgoing:1;
+       unsigned int overlapdial:1;
+       unsigned int permcallwaiting:1;
+       unsigned int permhidecallerid:1;                /* Whether to hide our outgoing caller ID or not */
+       unsigned int priindication_oob:1;
+       unsigned int pulse:1;
+       unsigned int pulsedial:1;                       /* whether a pulse dial phone is detected */
+       unsigned int restrictcid:1;                     /* Whether restrict the callerid -> only send ANI */
+       unsigned int threewaycalling:1;
+       unsigned int transfer:1;
+       unsigned int use_callerid:1;                    /* Whether or not to use caller id on this channel */
+       unsigned int use_callingpres:1;                 /* Whether to use the callingpres the calling switch sends */
+       unsigned int usedistinctiveringdetection:1;
+       unsigned int zaptrcallerid:1;                   /* should we use the callerid from incoming call on zap transfer or not */
+#if defined(ZAPATA_PRI)
+       unsigned int alerting:1;
+       unsigned int alreadyhungup:1;
+       unsigned int isidlecall:1;
+       unsigned int resetting:1;
+       unsigned int setup_ack:1;
+#endif
+#if defined(ZAPATA_R2)
+       unsigned int hasr2call:1;
+       unsigned int r2blocked:1;
+       unsigned int sigchecked:1;
+#endif
 
        struct zt_distRings drings;
-       int usedistinctiveringdetection;
 
        char context[AST_MAX_EXTENSION];
        char defcontext[AST_MAX_EXTENSION];
@@ -513,12 +565,12 @@ static struct zt_pvt {
        char language[MAX_LANGUAGE];
        char musicclass[MAX_LANGUAGE];
        char cid_num[AST_MAX_EXTENSION];
-       int cid_ton;                            /* Type Of Number (TON) */
+       int cid_ton;                                    /* Type Of Number (TON) */
        char cid_name[AST_MAX_EXTENSION];
        char lastcid_num[AST_MAX_EXTENSION];
        char lastcid_name[AST_MAX_EXTENSION];
-       char *origcid_num;                      /* malloced original callerid */
-       char *origcid_name;                     /* malloced original callerid */
+       char *origcid_num;                              /* malloced original callerid */
+       char *origcid_name;                             /* malloced original callerid */
        char callwait_num[AST_MAX_EXTENSION];
        char callwait_name[AST_MAX_EXTENSION];
        char rdnis[AST_MAX_EXTENSION];
@@ -526,89 +578,49 @@ static struct zt_pvt {
        unsigned int group;
        int law;
        int confno;                                     /* Our conference */
-       int confusers;                          /* Who is using our conference */
-       int propconfno;                         /* Propagated conference number */
+       int confusers;                                  /* Who is using our conference */
+       int propconfno;                                 /* Propagated conference number */
        ast_group_t callgroup;
        ast_group_t pickupgroup;
-       int immediate;                          /* Answer before getting digits? */
-       int channel;                            /* Channel Number or CRV */
+       int channel;                                    /* Channel Number or CRV */
        int span;                                       /* Span number */
-       int dialing;
-       time_t guardtime;                       /* Must wait this much time before using for new call */
-       int dialednone;
-       int use_callerid;                       /* Whether or not to use caller id on this channel */
-       int cid_signalling;                     /* CID signalling type bell202 or v23 */
-       int cid_start;                          /* CID start indicator, polarity or ring */
-       int hidecallerid;
-       int callreturn;
-       int permhidecallerid;           /* Whether to hide our outgoing caller ID or not */
-       int restrictcid;                        /* Whether restrict the callerid -> only send ANI */
-       int use_callingpres;            /* Whether to use the callingpres the calling switch sends */
-       int callingpres;                        /* The value of callling presentation that we're going to use when placing a PRI call */
-       int callwaitingrepeat;          /* How many samples to wait before repeating call waiting */
-       int cidcwexpire;                        /* When to expire our muting for CID/CW */
+       time_t guardtime;                               /* Must wait this much time before using for new call */
+       int cid_signalling;                             /* CID signalling type bell202 or v23 */
+       int cid_start;                                  /* CID start indicator, polarity or ring */
+       int callingpres;                                /* The value of callling presentation that we're going to use when placing a PRI call */
+       int callwaitingrepeat;                          /* How many samples to wait before repeating call waiting */
+       int cidcwexpire;                                /* When to expire our muting for CID/CW */
        unsigned char *cidspill;
        int cidpos;
        int cidlen;
        int ringt;
        int stripmsd;
-       int callwaiting;
        int callwaitcas;
        int callwaitrings;
        int echocancel;
        int echotraining;
-       int pulse;
-       int echocanbridged;
-       int echocanon;
-       int echobreak;
        char echorest[20];
-       int permcallwaiting;
-       int callwaitingcallerid;
-       int threewaycalling;
-       int transfer;
-       int canpark;
-       int digital;
-       int outgoing;
-       int dnd;
-       int busydetect;
        int busycount;
        int callprogress;
-       int priindication_oob;
-       struct timeval flashtime;       /* Last flash-hook time */
+       struct timeval flashtime;                       /* Last flash-hook time */
        struct ast_dsp *dsp;
        int cref;                                       /* Call reference number */
        ZT_DIAL_OPERATION dop;
-       int whichwink;                  /* SIG_FEATDMF_TA Which wink are we on? */
+       int whichwink;                                  /* SIG_FEATDMF_TA Which wink are we on? */
        char finaldial[64];
-       int destroy;
-       int ignoredtmf;                         
-       int inalarm;
        char accountcode[AST_MAX_ACCOUNT_CODE];         /* Account code */
-       int amaflags;                           /* AMA Flags */
-       char didtdd;                            /* flag to say its done it once */
-       struct tdd_state *tdd;          /* TDD flag */
-       int adsi;
-       int cancallforward;
+       int amaflags;                                   /* AMA Flags */
+       struct tdd_state *tdd;                          /* TDD flag */
        char call_forward[AST_MAX_EXTENSION];
        char mailbox[AST_MAX_EXTENSION];
        char dialdest[256];
        int onhooktime;
        int msgstate;
-       
-       int confirmanswer;                      /* Wait for '#' to confirm answer */
-       int distinctivering;            /* Which distinctivering to use */
-       int cidrings;                           /* Which ring to deliver CID on */
-       
-       int faxhandled;                         /* Has a fax tone already been handled? */
-       
-       char mate;                                      /* flag to say its in MATE mode */
-       int pulsedial;                          /* whether a pulse dial phone is detected */
-       int dtmfrelax;                          /* whether to run in relaxed DTMF mode */
+       int distinctivering;                            /* Which distinctivering to use */
+       int cidrings;                                   /* Which ring to deliver CID on */
+       int dtmfrelax;                                  /* whether to run in relaxed DTMF mode */
        int fake_event;
-       int zaptrcallerid;                      /* should we use the callerid from incoming call on zap transfer or not */
        int emdigitwait;
-       int answeronpolarityswitch;
-       int hanguponpolarityswitch;
        int polarityonanswerdelay;
        struct timeval polaritydelaytv;
        int sendcalleridafter;
@@ -617,24 +629,17 @@ static struct zt_pvt {
        struct zt_pvt *bearer;
        struct zt_pvt *realcall;
        q931_call *call;
-       int isidlecall;
-       int resetting;
        int prioffset;
        int logicalspan;
-       int alreadyhungup;
        int proceeding;
-       int alerting;
-       int setup_ack;                          /* whether we received SETUP_ACKNOWLEDGE or not */
        int dsp_features;
 #endif 
 #ifdef ZAPATA_R2
        int r2prot;
        mfcr2_t *r2;
-       int hasr2call;
-       int r2blocked;
-       int sigchecked;
 #endif 
        int polarity;
+
 } *iflist = NULL, *ifend = NULL;
 
 static struct ast_channel *zt_request(const char *type, int format, void *data, int *cause);
@@ -4209,7 +4214,7 @@ struct ast_frame  *zt_read(struct ast_channel *ast)
                        p->subs[index].linear = 0;
                        res = zt_setlinear(p->subs[index].zfd, p->subs[index].linear);
                        if (res) 
-                               ast_log(LOG_WARNING, "Unable to set channel %d (index %d) to campanded mode.\n", p->channel, index);
+                               ast_log(LOG_WARNING, "Unable to set channel %d (index %d) to companded mode.\n", p->channel, index);
                }
        } else {
                ast_log(LOG_WARNING, "Don't know how to read frames in format %s\n", ast_getformatname(ast->rawreadformat));