void VariablesListView::reexpandItems()
{
  //if we don't do this, m_expanded will have duplicates
  QValueList<QString> paths = m_expanded;
  m_expanded.clear();

  VariablesListViewItem* item;
  QValueList<QString>::iterator it;
  for(it = paths.begin(); it != paths.end(); it++)
  {
    item = getItemFromPath(*it);
    if(item) item->setOpen(true);
  }
}
Example #2
0
int main() {
#if HIGH_LEVEL_INTERFACE == 1
	start();

	interface_gse_send_E1Q1SB1_C1_Performance(1, 512);

	return 0;
#else
    int len = 0;

	initialise_iec61850();
	fp = initWinpcap();

	srand(time(NULL));
	float valueGSE = (float) rand() / (float) RAND_MAX;
	float valueSV = (float) rand() / (float) RAND_MAX;

	// test GOOSE
	E1Q1SB1.S1.C1.TVTRa_1.Vol.instMag.f = valueGSE;
	len = E1Q1SB1.S1.C1.LN0.ItlPositions.send(buf, 0, 512);
	pcap_sendpacket(fp, buf, len);

	gse_sv_packet_filter(buf, len);
	printf("GSE test: %s\n", D1Q1SB4.S1.C1.RSYNa_1.gse_inputs_ItlPositions.E1Q1SB1_C1_Positions.C1_TVTR_1_Vol_instMag.f == valueGSE ? "passed" : "failed");
	fflush(stdout);

	// test database lookup
	unsigned char databaseValueResult = 0;
	Item *ln = getLN("E1Q1SB1", "C1", "TVTRa_1");
	if (ln != NULL) {
		Item *valueDatabaseRef = getItem(ln, 3, "Vol", "instMag", "f");
		if (valueDatabaseRef != NULL) {
			float *databaseValue = (float *) (valueDatabaseRef->data);
			if (*databaseValue == valueGSE) {
				databaseValueResult = TRUE;
			}
		}
		else {
			printf("Database lookup test: item null\n");
		}
	}
	else {
		printf("Database lookup test: LN null\n");
	}
	printf("Database lookup test: %s\n", databaseValueResult ? "passed" : "failed");
	fflush(stdout);

	// test database lookup 2
	Item *valueDatabaseRef2 = getItemFromPath("E1Q1SB1", "C1/TVTRa_1.Vol.instMag.f");
	char databaseBuf[64] = {0};
	itemToJSON(databaseBuf, valueDatabaseRef2);
	printf("Database lookup test 2: %f, %s\n", *(float *) valueDatabaseRef2->data, databaseBuf);
	fflush(stdout);

	// test database print
	printf("Database print test:\n");
	char printBuf[10000];
	int charsPrinted =  itemTreeToJSON(printBuf, getIED("E1Q1SB1"), 0);
	printf("%d\n%s\n", charsPrinted, printBuf);
	charsPrinted =  itemTreeToJSONPretty(printBuf, getIED("E1Q1SB1"), 0);
	printf("%d\n%s\n", charsPrinted, printBuf);
	fflush(stdout);

	// test Sampled Values
	E1Q1SB1.S1.C1.exampleRMXU_1.AmpLocPhsA.instMag.f = valueSV;
	int i = 0;
	for (i = 0; i < E1Q1SB1.S1.C1.LN0.rmxuCB.noASDU; i++) {
		len = E1Q1SB1.S1.C1.LN0.rmxuCB.update(buf);

		if (len > 0) {
			pcap_sendpacket(fp, buf, len);
			gse_sv_packet_filter(buf, len);

			printf("SV test: %s\n", D1Q1SB4.S1.C1.exampleMMXU_1.sv_inputs_rmxuCB.E1Q1SB1_C1_rmxu[15].C1_RMXU_1_AmpLocPhsA.instMag.f == valueSV ? "passed" : "failed");
			fflush(stdout);
		}
	}

	pcap_close(fp);

	return 0;
#endif
}
Example #3
0
/**
 * Callback function which handles all HTTP requests.
 */
static int handle_http(struct mg_connection *conn) {
	char *url = (char *) &conn->uri[1];	// exclude the starting '/'
	Item *item;
	ACSIServer *acsiServer = (ACSIServer *) conn->server_param;

#ifdef USE_SSL
#if USE_HTTP_AUTH == 1
	static const char *passwords_file = "htpasswd.txt";
	FILE *fp = fopen(passwords_file, "r");

	if (fp == NULL || !mg_authorize_digest(conn, fp)) {
		mg_send_digest_auth_request(conn);
		return 1;
	}

	if (fp != NULL) {
		fclose(fp);
	}
#endif
#endif

	// check for method names in url
	if (strcmp(conn->request_method, "GET") == 0) {
		int len = 0;
		char printBuf[ACSI_RESPONSE_MAX_SIZE];

		if (strncmp(url, ACSI_GET_DEFINITION, strlen(ACSI_GET_DEFINITION)) == 0) {
			item = getItemFromPath(acsiServer->iedName, (char *) &url[strlen(ACSI_GET_DEFINITION) + 1]);
			len = itemDescriptionTreeToJSON(printBuf, item, FALSE);
		}
		else if (strncmp(url, ACSI_GET_DIRECTORY, strlen(ACSI_GET_DIRECTORY)) == 0) {
			item = getItemFromPath(acsiServer->iedName, (char *) &url[strlen(ACSI_GET_DIRECTORY) + 1]);
			len = itemDescriptionTreeToJSON(printBuf, item, TRUE);
		}
//		else if (strncmp(url, "scd", strlen("scd")) == 0) {
//		    mg_send_header(conn, "Content-Type", "application/xml");
//			mg_send_data(conn, scd_file, strlen(scd_file));
//		}
		else if (strncmp(url, ACSI_ASSOCIATE, strlen(ACSI_ASSOCIATE)) == 0) {
			acsiServer->clients = addClient(acsiServer->clients, conn->remote_ip, conn->remote_port);
			mg_send_data(conn, ACSI_OK, strlen(ACSI_OK));
			return 1;
		}
		else if (strncmp(url, ACSI_RELEASE, strlen(ACSI_RELEASE)) == 0) {
			// TODO raise flag here, rather than remove?
			acsiServer->clients = removeClientByConnection(acsiServer->clients, conn->remote_ip, conn->remote_port);
			mg_send_data(conn, ACSI_OK, strlen(ACSI_OK));
			return 1;
		}
		else if (strncmp(url, ACSI_ABORT, strlen(ACSI_ABORT)) == 0) {
			acsiServer->clients = removeClientByConnection(acsiServer->clients, conn->remote_ip, conn->remote_port);
			mg_send_data(conn, ACSI_OK, strlen(ACSI_OK));
			return 1;
		}
		else {
			item = getItemFromPath(acsiServer->iedName, (char *) url);
			len = itemTreeToJSON(printBuf, item);
		}

		if (item != NULL && len == -1) {
			mg_send_status(conn, 500);
			mg_send_data(conn, ACSI_BUFFER_OVERRUN, strlen(ACSI_BUFFER_OVERRUN));
			return 1;
		}
		else if (item != NULL && len > 0) {
#if ACSI_AUTO_ASSOCIATE == 1
			acsiServer->clients = addClient(acsiServer->clients, conn->remote_ip, conn->remote_port);
#endif
		    mg_send_header(conn, "Content-Type", "application/json");
		    mg_send_header(conn, "Cache-Control", "no-cache");
		    mg_send_header(conn, "Access-Control-Allow-Origin", "*");
			mg_send_data(conn, printBuf, len);
//			printf("len: %d\n", len);
//			fflush(stdout);
			return 1;
		}
	}
	else if (strcmp(conn->request_method, "POST") == 0) {
		item = getItemFromPath(acsiServer->iedName, (char *) url);
		int setReturn = setItem(item, conn->content, conn->content_len);

//		printf("content: %.*s\n", conn->content_len, conn->content);
//		fflush(stdout);

		if (setReturn > 0) {
		    mg_send_header(conn, "Cache-Control", "no-cache");
		    mg_send_header(conn, "Access-Control-Allow-Origin", "*");
			mg_send_data(conn, ACSI_OK, strlen(ACSI_OK));
		}
		else {
			mg_send_data(conn, ACSI_NOT_POSSIBLE, strlen(ACSI_NOT_POSSIBLE));
		}
		return 1;
	}

	// by default, return 404
	mg_send_status(conn, 404);
	mg_send_data(conn, ACSI_NOT_FOUND, strlen(ACSI_NOT_FOUND));
	return 1;
}