⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 schedtable.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
                    return SNMP_ERR_NOERROR;                }                break;            case COLUMN_SCHEDCONTEXTNAME:                ret = netsnmp_check_vb_type_and_max_size(                          request->requestvb, ASN_OCTET_STR, SCHED_STR1_LEN);                if (ret != SNMP_ERR_NOERROR) {                    netsnmp_set_request_error(reqinfo, request, ret);                    return SNMP_ERR_NOERROR;                }                break;            case COLUMN_SCHEDVARIABLE:                ret = netsnmp_check_vb_oid( request->requestvb );                if (ret != SNMP_ERR_NOERROR) {                    netsnmp_set_request_error(reqinfo, request, ret);                    return SNMP_ERR_NOERROR;                }                break;            case COLUMN_SCHEDVALUE:                ret = netsnmp_check_vb_int( request->requestvb );                if (ret != SNMP_ERR_NOERROR) {                    netsnmp_set_request_error(reqinfo, request, ret);                    return SNMP_ERR_NOERROR;                }                break;            case COLUMN_SCHEDTYPE:                ret = netsnmp_check_vb_int_range( request->requestvb,                             SCHED_TYPE_PERIODIC, SCHED_TYPE_ONESHOT );                if (ret != SNMP_ERR_NOERROR) {                    netsnmp_set_request_error(reqinfo, request, ret);                    return SNMP_ERR_NOERROR;                }                break;            case COLUMN_SCHEDADMINSTATUS:                ret = netsnmp_check_vb_truthvalue( request->requestvb );                if (ret != SNMP_ERR_NOERROR) {                    netsnmp_set_request_error(reqinfo, request,                                              SNMP_ERR_WRONGTYPE);                    return SNMP_ERR_NOERROR;                }                break;            case COLUMN_SCHEDSTORAGETYPE:                ret = netsnmp_check_vb_int_range( request->requestvb,                                                  ST_NONE, ST_READONLY );                /* XXX - check valid/consistent assignments */                if (ret != SNMP_ERR_NOERROR) {                    netsnmp_set_request_error(reqinfo, request, ret);                    return SNMP_ERR_NOERROR;                }                break;            case COLUMN_SCHEDROWSTATUS:                ret = netsnmp_check_vb_rowstatus( request->requestvb,                          (entry ? RS_ACTIVE: RS_NONEXISTENT));                /* XXX - check consistency assignments */                if (ret != SNMP_ERR_NOERROR) {                    netsnmp_set_request_error(reqinfo, request, ret);                    return SNMP_ERR_NOERROR;                }                break;            default:                netsnmp_set_request_error(reqinfo, request,                                          SNMP_ERR_NOTWRITABLE);                return SNMP_ERR_NOERROR;            }        }        break;    case MODE_SET_RESERVE2:        for (request = requests; request; request = request->next) {            tinfo = netsnmp_extract_table_info(request);            switch (tinfo->colnum) {            case COLUMN_SCHEDROWSTATUS:                switch (*request->requestvb->val.integer) {                case RS_CREATEANDGO:                case RS_CREATEANDWAIT:                    /*                     * Create an (empty) new row structure                     */                    memset(owner, 0, SCHED_STR1_LEN+1);                    memset(name,  0, SCHED_STR1_LEN+1);                    memcpy(owner, tinfo->indexes->val.string,                                  tinfo->indexes->val_len);                    memcpy(name,  tinfo->indexes->next_variable->val.string,                                  tinfo->indexes->next_variable->val_len);                    row = schedTable_createEntry(owner, name);                    if (!row) {                        netsnmp_set_request_error(reqinfo, request,                                                  SNMP_ERR_RESOURCEUNAVAILABLE);                        return SNMP_ERR_NOERROR;                    }                    netsnmp_insert_tdata_row(request, row);                }            }        }        break;    case MODE_SET_FREE:        for (request = requests; request; request = request->next) {            tinfo = netsnmp_extract_table_info(request);            switch (tinfo->colnum) {            case COLUMN_SCHEDROWSTATUS:                switch (*request->requestvb->val.integer) {                case RS_CREATEANDGO:                case RS_CREATEANDWAIT:                    /*                     * Tidy up after a failed row creation request                     */                     entry = (struct schedTable_entry *)                                netsnmp_tdata_extract_entry(request);                    if (entry &&                      !(entry->flags & SCHEDULE_FLAG_VALID)) {                        row = (netsnmp_tdata_row *)                                netsnmp_tdata_extract_row(request);                        schedTable_removeEntry(row);                    }                }            }        }        break;    case MODE_SET_ACTION:        for (request = requests; request; request = request->next) {            entry = (struct schedTable_entry *)                    netsnmp_tdata_extract_entry(request);            if (!entry) {                /*                 * New rows must be created via the RowStatus column                 */                netsnmp_set_request_error(reqinfo, request,                                          SNMP_ERR_NOCREATION);                                      /* or inconsistentName? */                return SNMP_ERR_NOERROR;            }        }        break;    case MODE_SET_UNDO:        break;    case MODE_SET_COMMIT:        /*         * All these assignments are "unfailable", so it's         *  (reasonably) safe to apply them in the Commit phase         */        for (request = requests; request; request = request->next) {            entry = (struct schedTable_entry *)                    netsnmp_tdata_extract_entry(request);            tinfo = netsnmp_extract_table_info( request);            switch (tinfo->colnum) {            case COLUMN_SCHEDDESCR:                memset(entry->schedDescr, 0, sizeof(entry->schedDescr));                memcpy(entry->schedDescr, request->requestvb->val.string,                                          request->requestvb->val_len);                break;            case COLUMN_SCHEDINTERVAL:                entry->schedInterval = *request->requestvb->val.integer;                recalculate = 1;                break;            case COLUMN_SCHEDWEEKDAY:                entry->schedWeekDay  = request->requestvb->val.string[0];                recalculate = 1;                break;            case COLUMN_SCHEDMONTH:                entry->schedMonth[0] = request->requestvb->val.string[0];                entry->schedMonth[1] = request->requestvb->val.string[1];                recalculate = 1;                break;            case COLUMN_SCHEDDAY:                memset(entry->schedDay, 0, sizeof(entry->schedDay));                memcpy(entry->schedDay, request->requestvb->val.string,                                        request->requestvb->val_len);                recalculate = 1;                break;            case COLUMN_SCHEDHOUR:                entry->schedHour[0]  = request->requestvb->val.string[0];                entry->schedHour[1]  = request->requestvb->val.string[1];                entry->schedHour[2]  = request->requestvb->val.string[2];                recalculate = 1;                break;            case COLUMN_SCHEDMINUTE:                memset(entry->schedMinute, 0, sizeof(entry->schedMinute));                memcpy(entry->schedMinute, request->requestvb->val.string,                                           request->requestvb->val_len);                recalculate = 1;                break;            case COLUMN_SCHEDCONTEXTNAME:                memset(entry->schedContextName, 0, SCHED_STR1_LEN+1);                memcpy(entry->schedContextName,                                           request->requestvb->val.string,                                           request->requestvb->val_len);                break;            case COLUMN_SCHEDVARIABLE:                memset(entry->schedVariable, 0, sizeof(entry->schedVariable));                memcpy(entry->schedVariable,                                           request->requestvb->val.string,                                           request->requestvb->val_len);                entry->schedVariable_len =                                  request->requestvb->val_len/sizeof(oid);                break;            case COLUMN_SCHEDVALUE:                entry->schedValue = *request->requestvb->val.integer;                break;            case COLUMN_SCHEDTYPE:                entry->schedType  = *request->requestvb->val.integer;                break;            case COLUMN_SCHEDADMINSTATUS:                if (*request->requestvb->val.integer == TV_TRUE)                    entry->flags |=  SCHEDULE_FLAG_ENABLED;                else                    entry->flags &= ~SCHEDULE_FLAG_ENABLED;                break;            case COLUMN_SCHEDSTORAGETYPE:                entry->schedStorageType = *request->requestvb->val.integer;                break;            case COLUMN_SCHEDROWSTATUS:                switch (*request->requestvb->val.integer) {                case RS_ACTIVE:                    entry->flags |= SCHEDULE_FLAG_ACTIVE;                    break;                case RS_CREATEANDGO:                    entry->flags |= SCHEDULE_FLAG_ACTIVE;                    entry->flags |= SCHEDULE_FLAG_VALID;                    entry->session =                        netsnmp_iquery_pdu_session(reqinfo->asp->pdu);                    break;                case RS_CREATEANDWAIT:                    entry->flags |= SCHEDULE_FLAG_VALID;                    entry->session =                        netsnmp_iquery_pdu_session(reqinfo->asp->pdu);                    break;                case RS_DESTROY:                    row = (netsnmp_tdata_row *)                               netsnmp_tdata_extract_row(request);                    schedTable_removeEntry(row);                }                recalculate = 1;                break;            }        }        if (recalculate)            sched_nextTime(entry);        break;    }    return SNMP_ERR_NOERROR;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -