Ejemplo n.º 1
0
/**
 * perform SIP message sanity check
 * @param _msg - SIP message structure
 * @param msg_checks - bitmask of sanity tests to perform over message
 * @param uri_checks - bitmask of sanity tests to perform over uri
 * @return -1 on error, 0 on tests failure, 1 on success
 */
int sanity_check(struct sip_msg* _msg, int msg_checks, int uri_checks)
{
    int ret;

    ret = SANITY_CHECK_PASSED;
    if (SANITY_RURI_SIP_VERSION & msg_checks &&
            (ret = check_ruri_sip_version(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_RURI_SCHEME & msg_checks &&
            (ret = check_ruri_scheme(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_REQUIRED_HEADERS & msg_checks &&
            (ret = check_required_headers(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_VIA_SIP_VERSION & msg_checks &&
            (ret = check_via_sip_version(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_VIA_PROTOCOL & msg_checks &&
            (ret = check_via_protocol(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_CSEQ_METHOD & msg_checks &&
            (ret = check_cseq_method(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_CSEQ_VALUE & msg_checks &&
            (ret = check_cseq_value(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_CL & msg_checks &&
            (ret = check_cl(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_EXPIRES_VALUE & msg_checks &&
            (ret = check_expires_value(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_PROXY_REQUIRE & msg_checks &&
            (ret = check_proxy_require(_msg)) != SANITY_CHECK_PASSED) {
        goto done;
    }
    if (SANITY_PARSE_URIS & msg_checks &&
            (ret = check_parse_uris(_msg, uri_checks)) != SANITY_CHECK_PASSED) {
        goto done;
    }

    if (SANITY_CHECK_DIGEST & msg_checks &&
            (ret = check_digest(_msg, uri_checks)) != SANITY_CHECK_PASSED) {
        goto done;
    }

done:
    return ret;
}
Ejemplo n.º 2
0
void captureOctTree(Point3f camera, Point3f target, Point3f up, int width, int height, float *data)
{
    //normalize vectors
    target = vectNormalize(target);
    up = vectNormalize(up);

    Point3f right = vectNormalize(vectMul(target, up));
    Point3f relative_up = vectNormalize(vectMul(right, camera_target));

    target = vectDiv(target, tanf(AOV / 2.f));
    Point3f bottom_left_vec = vectSum(target, vectDiv(relative_up, -2), vectDiv(right, -2));

    Point3f dright = vectDiv(right, (float)width);
    Point3f dup = vectDiv(relative_up, (float)height);

    cl_int status;

    status = clEnqueueAcquireGLObjects(queue, 1, &image, 0, NULL, NULL);
    check_cl(status, "enqueue gl");

    // find the camera
    Point3f origin = camera;
    OctTreeNode *tree = mainOctTree;
    int dx, dy, dz;
    float radius = 1.f;
    Point3f center = (Point3f) { 0.f, 0.f, 0.f };
    Point3f local = vectMulScalar(origin, center, -1);
    cl_int offset = 0;
    while (tree->type >= 0) {
        dx = local.x > 0;
        dy = local.y > 0;
        dz = local.z > 0;
        offset = tree->nodes[dx][dy][dz];
        tree = mainOctTree + offset;

        radius /= 2.f;
        center = (Point3f) {
            center.x + (2 * dx - 1) * radius,
            center.y + (2 * dy - 1) * radius,
            center.z + (2 * dz - 1) * radius
        };

        local = vectMulScalar(origin, center, -1);
    }

    Point3f camera111 = vectMulScalar(origin, (Point3f) { 1.f, 1.f, 1.f }, 1.f);
    Point3f light111 = vectMulScalar(light, (Point3f) { 1.f, 1.f, 1.f }, 1.f);

    // cl_float3 is bigger than Point3f but we're only passing stack-allocated stuff, so reading garbage is safe
    status = clSetKernelArg(kernel, 0, sizeof(cl_float3), &camera111);
    check_cl(status, "set arg 0");
    status = clSetKernelArg(kernel, 1, sizeof(cl_float3), &light111);
    check_cl(status, "set arg 1");
    status = clSetKernelArg(kernel, 2, sizeof(cl_float3), &bottom_left_vec);
    check_cl(status, "set arg 2");
    status = clSetKernelArg(kernel, 3, sizeof(cl_float3), &dup);
    check_cl(status, "set arg 3");
    status = clSetKernelArg(kernel, 4, sizeof(cl_float3), &dright);
    check_cl(status, "set arg 4");
    status = clSetKernelArg(kernel, 5, sizeof(cl_mem), &mainOctCL);
    check_cl(status, "set arg 5");
    status = clSetKernelArg(kernel, 6, sizeof(cl_mem), &image);
    check_cl(status, "set arg 6");
    status = clSetKernelArg(kernel, 7, sizeof(cl_int), &offset);
    check_cl(status, "set arg 7");

    // run kernel
    size_t global_work_size[] = {width, height};
    size_t local_work_size[] = {8, 8};
    status = clEnqueueNDRangeKernel(queue, kernel, 2, NULL, global_work_size, local_work_size, 0, NULL, NULL);
    check_cl(status, "enqueue kernel");

    status = clEnqueueReleaseGLObjects(queue, 1, &image, 0, NULL, NULL);
    check_cl(status, "release gl");

    status = clFinish(queue);
    check_cl(status, "finish");

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, texture);

    glBegin(GL_QUADS);
    glTexCoord2i(0, 1);
    glVertex2f(-1, 1.0f);
    glTexCoord2i(1, 1);
    glVertex2f(1.0f, 1.0f);
    glTexCoord2i(1, 0);
    glVertex2f(1.0f, -1.f);
    glTexCoord2i(0, 0);
    glVertex2f(-1, -1.f);
    glEnd();
    glDisable(GL_TEXTURE_2D);
    glFinish();
}
Ejemplo n.º 3
0
static int sanity_check(struct sip_msg* _msg, char* _number, char* _arg) {
	int ret, check, arg;

	if (_number == NULL) {
		check = default_checks;
	}
	else {
		check = (int)(long)_number;
	}
	if (_arg == NULL) {
		arg = uri_checks;
	}
	else {
		arg = (int)(long)_arg;
	}

	if (SANITY_RURI_SIP_VERSION & check &&
		(ret = check_ruri_sip_version(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_RURI_SCHEME & check &&
		(ret = check_ruri_scheme(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_REQUIRED_HEADERS & check &&
		(ret = check_required_headers(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_VIA_SIP_VERSION & check &&
		(ret = check_via_sip_version(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_VIA_PROTOCOL & check &&
		(ret = check_via_protocol(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_CSEQ_METHOD & check &&
		(ret = check_cseq_method(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_CSEQ_VALUE & check &&
		(ret = check_cseq_value(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_CL & check &&
		(ret = check_cl(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_EXPIRES_VALUE & check &&
		(ret = check_expires_value(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_PROXY_REQUIRE & check &&
		(ret = check_proxy_require(_msg)) != SANITY_CHECK_PASSED) {
		return ret;
	}
	if (SANITY_PARSE_URIS & check &&
		(ret = check_parse_uris(_msg, arg)) != SANITY_CHECK_PASSED) {
		return ret;
	}

	if (SANITY_CHECK_DIGEST & check &&
	        (ret = check_digest(_msg, arg)) != SANITY_CHECK_PASSED) {
	        return ret;
	}

	DBG("all sanity checks passed\n");
	/* nobody complained so everything is fine */
	return 1;
}
Ejemplo n.º 4
0
static void check(const struct sdparm_mode_page_item * mpi,
                  const struct sdparm_mode_page_item * mpi_b)
{
    unsigned char mask;
    const struct sdparm_mode_page_item * kp = mpi;
    const struct sdparm_mode_page_item * jp = mpi;
    const char * acron;
    int res, prev_mp, prev_msp, prev_pdt, sbyte, sbit, nbits;
    int second_k = 0;
    int second_j = 0;

    clear_cl();
    for (prev_mp = 0, prev_msp = 0, prev_pdt = -1; ; ++kp) {
        if (NULL == kp->acron) {
            if ((NULL == mpi_b) || second_k)
                break;
            prev_mp = 0;
            prev_msp = 0;
            kp = mpi_b;
            second_k = 1;
        }
        acron = kp->acron ? kp->acron : "?";
        if ((prev_mp != kp->page_num) || (prev_msp != kp->subpage_num)) {
            if (prev_mp > kp->page_num)
                printf("  mode page 0x%x,0x%x out of order\n", kp->page_num,
                        kp->subpage_num);
            if ((prev_mp == kp->page_num) && (prev_msp > kp->subpage_num))
                printf("  mode subpage 0x%x,0x%x out of order, previous msp "
                       "was 0x%x\n", kp->page_num, kp->subpage_num, prev_msp);
            prev_mp = kp->page_num;
            prev_msp = kp->subpage_num;
            prev_pdt = kp->pdt;
            clear_cl();
        } else if ((prev_pdt >= 0) && (prev_pdt != kp->pdt)) {
            if (prev_pdt > kp->pdt)
                printf("  mode page 0x%x,0x%x pdt out of order, pdt was "
                       "%d, now %d\n", kp->page_num, kp->subpage_num,
                       prev_pdt, kp->pdt);
            prev_pdt = kp->pdt;
        }
        for (jp = kp + 1, second_j = second_k; ; ++jp) {
            if (NULL == jp->acron) {
                if ((NULL == mpi_b) || second_j)
                    break;
                jp = mpi_b;
                second_j = 1;
            }
            if ((0 == strcmp(acron, jp->acron)) &&
                (! (jp->flags & MF_CLASH_OK)))
                printf("  acronym '%s' with this description: '%s'\n    "
                       "clashes with '%s'\n", acron, kp->description,
                       jp->description);
        }
        sbyte = kp->start_byte;
        if ((unsigned)sbyte + 8 > MAX_MP_LEN) {
            printf("  acronym: %s  start byte too large: %d\n", kp->acron,
                   sbyte);
            continue;
        }
        sbit = kp->start_bit;
        if ((unsigned)sbit > 7) {
            printf("  acronym: %s  start bit too large: %d\n", kp->acron,
                   sbit);
            continue;
        }
        nbits = kp->num_bits;
        if (nbits > 64) {
            printf("  acronym: %s  number of bits too large: %d\n",
                   kp->acron, nbits);
            continue;
        }
        if (nbits < 1) {
            printf("  acronym: %s  number of bits too small: %d\n",
                   kp->acron, nbits);
            continue;
        }
        mask = (1 << (sbit + 1)) - 1;
        if ((nbits - 1) < sbit)
            mask &= ~((1 << (sbit + 1 - nbits)) - 1);
        res = check_cl(sbyte, kp->pdt, mask);
        if (res) {
            if (1 == res)
                printf("  0x%x,0x%x: clash at start_byte: %d, bit: %d "
                       "[latest acron: %s, this pdt]\n", prev_mp, prev_msp,
                       sbyte, sbit, acron);
            else if (2 == res)
                printf("  0x%x,0x%x: clash at start_byte: %d, bit: %d "
                       "[latest acron: %s, another pdt]\n", prev_mp,
                       prev_msp, sbyte, sbit, acron);
            else
                printf("  0x%x,0x%x: clash, bad data at start_byte: %d, "
                       "bit: %d [latest acron: %s]\n", prev_mp,
                       prev_msp, sbyte, sbit, acron);
        }
        set_cl(sbyte, kp->pdt, mask);
        if ((nbits - 1) > sbit) {
            nbits -= (sbit + 1);
            if ((nbits > 7) && (0 != (nbits % 8)))
                printf("  0x%x,0x%x: check nbits: %d, start_byte: %d, bit: "
                       "%d [acron: %s]\n", prev_mp, prev_msp, kp->num_bits,
                       sbyte, sbit, acron);
            do {
                ++sbyte;
                mask = 0xff;
                if (nbits > 7)
                    nbits -= 8;
                else {
                    mask &= ~((1 << (8 - nbits)) - 1);
                    nbits = 0;
                }
                res = check_cl(sbyte, kp->pdt, mask);
                if (res) {
                    if (1 == res)
                        printf("   0x%x,0x%x: clash at start_byte: %d, "
                               "bit: %d [latest acron: %s, this pdt]\n",
                               prev_mp, prev_msp, sbyte, sbit, acron);
                    else if (2 == res)
                        printf("   0x%x,0x%x: clash at start_byte: %d, "
                               "bit: %d [latest acron: %s, another pdt]\n",
                               prev_mp, prev_msp, sbyte, sbit, acron);
                    else
                        printf("   0x%x,0x%x: clash, bad at start_byte: "
                               "%d, bit: %d [latest acron: %s]\n",
                               prev_mp, prev_msp, sbyte, sbit, acron);
                }
                set_cl(sbyte, kp->pdt, mask);
            } while (nbits > 0);
        }
    }
}
Ejemplo n.º 5
0
/**
 * perform SIP message sanity check
 * @param _msg - SIP message structure
 * @param msg_checks - bitmask of sanity tests to perform over message
 * @param uri_checks - bitmask of sanity tests to perform over uri
 * @return -1 on error, 0 on tests failure, 1 on success
 */
int sanity_check(struct sip_msg* _msg, int msg_checks, int uri_checks)
{
	int ret;

	if(ksr_sanity_noreply!=0) {
		ksr_sanity_info_init();
	}

	ret = SANITY_CHECK_PASSED;
	if (SANITY_RURI_SIP_VERSION & msg_checks &&
			(ret = check_ruri_sip_version(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_RURI_SCHEME & msg_checks &&
			(ret = check_ruri_scheme(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_REQUIRED_HEADERS & msg_checks &&
			(ret = check_required_headers(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_VIA1_HEADER & msg_checks &&
			(ret = check_via1_header(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_VIA_SIP_VERSION & msg_checks &&
			(ret = check_via_sip_version(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_VIA_PROTOCOL & msg_checks &&
			(ret = check_via_protocol(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_CSEQ_METHOD & msg_checks &&
			(ret = check_cseq_method(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_CSEQ_VALUE & msg_checks &&
			(ret = check_cseq_value(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_CL & msg_checks &&
			(ret = check_cl(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_EXPIRES_VALUE & msg_checks &&
			(ret = check_expires_value(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_PROXY_REQUIRE & msg_checks &&
			(ret = check_proxy_require(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_PARSE_URIS & msg_checks &&
			(ret = check_parse_uris(_msg, uri_checks)) != SANITY_CHECK_PASSED) {
		goto done;
	}

	if (SANITY_CHECK_DIGEST & msg_checks &&
			(ret = check_digest(_msg, uri_checks)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_CHECK_AUTHORIZATION & msg_checks &&
			(ret = check_authorization(_msg, uri_checks)) != SANITY_CHECK_PASSED) {
		goto done;
	}
	if (SANITY_CHECK_DUPTAGS & msg_checks &&
			(ret = check_duptags(_msg)) != SANITY_CHECK_PASSED) {
		goto done;
	}

done:
	return ret;
}