Changeset 37740


Ignore:
Timestamp:
07/06/16 21:56:19 (6 years ago)
Author:
obi
Message:

next c* test

Location:
titan/titan
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/ca.h

    r37738 r37740  
    735735}
    736736
     737int caccAPDU(struct dvbdev* dvbnode, int sessionnr, unsigned char *tag, void *data, int len)
     738{
     739        int i = 0;
     740        struct casession* casession = NULL;
     741
     742        if(dvbnode == NULL || dvbnode->caslot == NULL) return 0;
     743        casession = dvbnode->caslot->casession;
     744
     745        debug(620, "cc manager %02x %02x %02x", tag[0], tag[1], tag[2]);
     746
     747        if(debug_level == 620)
     748        {
     749                i = 0;
     750                printf("CC manager data (len %d): > ", len);
     751                for(i = 0; i < len; i++)
     752                        printf("%02x ", ((unsigned char*)data)[i]);
     753                printf("\n");
     754        }
     755
     756        if(tag[0] == 0x9f && tag[1] == 0x90)
     757        {
     758                switch(tag[2])
     759                {
     760                        case 0x01: ci_ccmgr_cc_open_cnf(dvbnode, sessionnr); break;
     761                        case 0x03: ci_ccmgr_cc_data_req(dvbnode, sessionnr, (const uint8_t*)data, len); break;
     762//                      case 0x05: ci_ccmgr_cc_sync_req(); break;
     763//                      case 0x07: ci_ccmgr_cc_sac_data_req(dvbnode, sessionnr, (const uint8_t*)data, len); break;
     764//                      case 0x09: ci_ccmgr_cc_sac_sync_req(dvbnode, sessionnr, (const uint8_t*)data, len); break;
     765                        default:
     766                                debug(620, "unknown APDU tag 9F 80 %02x\n", tag[2]);
     767                                break;
     768                }
     769        }
     770        return 0;
     771}
     772
    737773//datetime functions
    738774
     
    12021238                case 0x00400041:
    12031239                        casession[sessionnr].inuse = 1;
    1204                         casession[sessionnr].mmimanager = 1;
     1240                        casession[sessionnr].ccmanager = 1;
    12051241                        //neutrino sessions[session_nb - 1] = new eDVBCIMMISession(slot);
    12061242                        debug(620, "create session mmi manager");
     
    13061342                {
    13071343                        case 0x90:
     1344// test
     1345                                ci_ccmgr_cc_open_cnf(dvbnode, sessionnr);
    13081346                                break;
    13091347                        case 0x94:
     
    13751413                        {
    13761414                                if(cammiAPDU(dvbnode, sessionnr, tag, pkt, alen))
     1415                                        casession->action = 1;
     1416                        }
     1417                        else if(casession->ccmanager == 1)
     1418                        {
     1419                                if(caccAPDU(dvbnode, sessionnr, tag, pkt, alen))
    13771420                                        casession->action = 1;
    13781421                        }
     
    36293672        return pos;
    36303673}
     3674
    36313675#endif
    36323676
     
    36423686}
    36433687
     3688void ci_ccmgr_cc_open_cnf(struct dvbdev* dvbnode, int sessionnr)
     3689{
     3690        uint8_t tag[3] = { 0x9f, 0x90, 0x02 };
     3691        uint8_t bitmap = 0x01;
     3692        printf("%s -> %s\n", FILENAME, __FUNCTION__);
     3693
     3694        ci_ccmgr_cc_data_initialize(dvbnode);
     3695
     3696//      sendAPDU(dvbnode, sessionnr, tag, data, 1);
     3697        sendAPDU(dvbnode, sessionnr, tag, NULL, 0);
     3698
     3699//      sendAPDU(tag, &bitmap, 1);
     3700}
     3701
     3702int ci_ccmgr_cc_data_initialize(struct dvbdev* dvbnode)
     3703{
     3704        struct cc_ctrl_data *data;
     3705        uint8_t buf[32], host_id[8];
     3706
     3707        printf("%s -> %s\n", FILENAME, __FUNCTION__);
     3708
     3709//      dvbnode->caslot->private_data = NULL;
     3710        if (dvbnode->caslot->private_data) {
     3711                fprintf(stderr, "strange private_data not null!\n");
     3712                return 0;
     3713        }
     3714
     3715        data = (struct cc_ctrl_data*)calloc(1, sizeof(struct cc_ctrl_data));
     3716        if (!data) {
     3717                fprintf(stderr, "out of memory\n");
     3718                return 0;
     3719        }
     3720
     3721        /* parent */
     3722        data->slot = dvbnode->caslot;
     3723
     3724        /* clear storage of credentials */
     3725        element_init(data);
     3726
     3727        /* set status field - OK */
     3728        memset(buf, 0, 1);
     3729        if (!element_set(data, 30, buf, 1))
     3730                fprintf(stderr, "cannot set status in elements\n");
     3731
     3732        /* set uri_versions */
     3733        memset(buf, 0, 32);
     3734        buf[31] = 1;
     3735        if (!element_set(data, 29, buf, 32))
     3736                fprintf(stderr, "cannot set uri_versions in elements\n");
     3737
     3738        /* load first AKH */
     3739        data->akh_index = 0;
     3740        if (!get_authdata(host_id, data->dhsk, buf, dvbnode->caslot->connid, data->akh_index)) {
     3741                /* no AKH available */
     3742                memset(buf, 0, sizeof(buf));
     3743                data->akh_index = 5;    /* last one */
     3744        }
     3745
     3746        if (!element_set(data, 22, buf, 32))
     3747                fprintf(stderr, "cannot set AKH in elements\n");
     3748
     3749        if (!element_set(data, 5, host_id, 8))
     3750                fprintf(stderr, "cannot set host_id elements\n");
     3751
     3752        dvbnode->caslot->private_data = data;
     3753
     3754        return 1;
     3755}
     3756
     3757//bool eDVBCIContentControlManagerSession::ci_ccmgr_cc_data_req(tSlot *tslot, const uint8_t *data, unsigned int len)
     3758int ci_ccmgr_cc_data_req(struct dvbdev* dvbnode, int sessionnr, const uint8_t *data, unsigned int len)
     3759{
     3760//      struct cc_ctrl_data *cc_data = (struct cc_ctrl_data*)(tslot->private_data);
     3761        struct cc_ctrl_data *cc_data = (struct cc_ctrl_data*)(dvbnode->caslot->private_data);
     3762        uint8_t cc_data_cnf_tag[3] = { 0x9f, 0x90, 0x04 };
     3763        uint8_t dest[2048 * 2];
     3764        int dt_nr;
     3765        int id_bitmask;
     3766        int answ_len;
     3767        unsigned int rp = 0;
     3768
     3769        printf("%s -> %s\n", FILENAME, __FUNCTION__);
     3770
     3771        if (len < 2)
     3772                return 0;
     3773
     3774        id_bitmask = data[rp++];
     3775
     3776        /* handle data loop */
     3777        dt_nr = data[rp++];
     3778        rp += data_get_loop(cc_data, &data[rp], len - rp, dt_nr);
     3779
     3780        if (len < rp + 1)
     3781                return 0;
     3782
     3783        /* handle req_data loop */
     3784        dt_nr = data[rp++];
     3785
     3786        dest[0] = id_bitmask;
     3787        dest[1] = dt_nr;
     3788
     3789        answ_len = data_req_loop(cc_data, &dest[2], &data[rp], len - rp, dt_nr);
     3790        if (answ_len <= 0) {
     3791                fprintf(stderr, "cannot req data\n");
     3792                return 0;
     3793        }
     3794
     3795        answ_len += 2;
     3796
     3797        sendAPDU(dvbnode, sessionnr, cc_data_cnf_tag, dest, answ_len);
     3798
     3799        return 1;
     3800}
     3801
    36443802#endif
  • titan/titan/header.h

    r37729 r37740  
    6666int aes_xcbc_mac_done(struct aes_xcbc_mac_ctx *ctx, uint8_t *out);
    6767int checkcerts(void);
     68void ci_ccmgr_cc_open_cnf(struct dvbdev* dvbnode, int sessionnr);
     69int ci_ccmgr_cc_data_initialize(struct dvbdev* dvbnode);
     70int ci_ccmgr_cc_data_req(struct dvbdev* dvbnode, int sessionnr, const uint8_t *data, unsigned int len);
     71
    6872#endif
    6973
  • titan/titan/struct.h

    r37733 r37740  
    117117#endif
    118118
    119 #define DRIVER " -   - "
     119#define DRIVER "Wed Jul  6 21:54:48 CEST 2016"
    120120#define OVERSION "1.76"
    121121#define PROGNAME "titan"
     
    518518        int appmanager;
    519519        int resmanager;
     520        int ccmanager;
    520521        char* mmititle;
    521522        char* mmisubtitle;
     
    539540        uint8_t lastParity;
    540541        unsigned char scrambled;
     542        void *private_data;
    541543#endif
    542544};
Note: See TracChangeset for help on using the changeset viewer.