コード例 #1
0
ファイル: vcard-read.c プロジェクト: AndyLavr/gammu
int main(int argc, char **argv)
{
	size_t pos = 0;
	GSM_MemoryEntry pbk;
	GSM_Error error;
	FILE *f;
	size_t len;
	gboolean generate = FALSE;
	GSM_Backup backup;
	int i;
	GSM_Debug_Info *debug_info;

	/* Configure debugging */
	debug_info = GSM_GetGlobalDebug();
	GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info);
	GSM_SetDebugLevel("textall", debug_info);

	/* Check parameters */
	if (argc != 3 && argc != 4) {
		printf("Not enough parameters!\nUsage: vcard-read file.vcf file.backup\n");
		return 1;
	}

	/* Check for generating option */
	if (argc == 4 && strcmp(argv[3], "generate") == 0) {
		generate = TRUE;
	}

	/* Open file */
	f = fopen(argv[1], "r");
	test_result(f != NULL);

	/* Read data */
	len = fread(buffer, 1, sizeof(buffer) - 1, f);
	test_result(feof(f));

	/* Zero terminate string */
	buffer[len] = 0;

	/* We don't need file any more */
	fclose(f);

	/* Parse vCard */
	error = GSM_DecodeVCARD(NULL, buffer, &pos, &pbk, SonyEricsson_VCard21);
	gammu_test_result(error, "GSM_DecodeVCARD");

	/* Encode vCard back */
	pos = 0;
	error = GSM_EncodeVCARD(NULL, vcard_buffer, sizeof(vcard_buffer), &pos, &pbk, TRUE, SonyEricsson_VCard21);
	gammu_test_result(error, "GSM_EncodeVCARD");

	/*
	 * Best would be to compare here, but we never can get
	 * absolutely same as original.
	 */
	printf("ORIGINAL:\n%s\n----\nENCODED:\n%s\n", buffer, vcard_buffer);

	/* Generate file if we should */
	if (generate) {
		GSM_ClearBackup(&backup);
		strcpy(backup.Creator, "vCard tester");
		pbk.Location = 0;
		backup.PhonePhonebook[0] = &pbk;
		backup.PhonePhonebook[1] = NULL;
		error = GSM_SaveBackupFile(argv[2], &backup, TRUE);
		gammu_test_result(error, "GSM_SaveBackupFile");
	}

	/* Read file content */
	GSM_ClearBackup(&backup);
	error = GSM_ReadBackupFile(argv[2], &backup, GSM_Backup_GammuUCS2);
	gammu_test_result(error, "GSM_ReadBackupFile");

	/* Compare size */
	test_result(pbk.EntriesNum == backup.PhonePhonebook[0]->EntriesNum);

	/* Compare content */
	for (i = 0; i < pbk.EntriesNum; i++) {
		test_result(pbk.Entries[i].EntryType == backup.PhonePhonebook[0]->Entries[i].EntryType);
		printf("Entry type: %d\n", pbk.Entries[i].EntryType);
		switch (pbk.Entries[i].EntryType) {
			case PBK_Number_General:
			case PBK_Number_Mobile:
			case PBK_Number_Fax:
			case PBK_Number_Pager:
			case PBK_Number_Other:
			case PBK_Number_Messaging:
			case PBK_Number_Video:
			case PBK_Text_Note:
			case PBK_Text_Postal:
			case PBK_Text_Email:
			case PBK_Text_Email2:
			case PBK_Text_URL:
			case PBK_Text_LUID:
			case PBK_Text_Name:
			case PBK_Text_LastName:
			case PBK_Text_FirstName:
			case PBK_Text_SecondName:
			case PBK_Text_FormalName:
			case PBK_Text_NamePrefix:
			case PBK_Text_NameSuffix:
			case PBK_Text_NickName:
			case PBK_Text_Company:
			case PBK_Text_JobTitle:
			case PBK_Text_StreetAddress:
			case PBK_Text_City:
			case PBK_Text_State:
			case PBK_Text_Zip:
			case PBK_Text_Country:
			case PBK_Text_Custom1:
			case PBK_Text_Custom2:
			case PBK_Text_Custom3:
			case PBK_Text_Custom4:
			case PBK_Text_UserID:
			case PBK_Text_PictureName:
			case PBK_PushToTalkID:
			case PBK_Text_VOIP:
			case PBK_Text_SWIS:
			case PBK_Text_WVID:
			case PBK_Text_SIP:
			case PBK_Text_DTMF:
				test_result(mywstrncmp(pbk.Entries[i].Text, backup.PhonePhonebook[0]->Entries[i].Text, 0) == TRUE);
				break;
			case PBK_Photo:
				test_result((pbk.Entries[i].Picture.Length ==
					     backup.PhonePhonebook[0]->Entries[i].Picture.Length) &&
					    memcmp(pbk.Entries[i].Picture.Buffer, backup.PhonePhonebook[0]->Entries[i].Picture.Buffer, pbk.Entries[i].Picture.Length) == 0);
				free(pbk.Entries[i].Picture.Buffer);
				break;
			case PBK_Date:
			case PBK_LastModified:
				break;
			case PBK_Category:
			case PBK_Private:
			case PBK_RingtoneID:
			case PBK_PictureID:
			case PBK_CallLength:
			case PBK_Caller_Group:
				test_result(pbk.Entries[i].Number == backup.PhonePhonebook[0]->Entries[i].Number);
				break;
		}
	}

	error = PrintMemoryEntry(&pbk, NULL);
	gammu_test_result(error, "PrintMemoryEntry");

	/* Free data */
	GSM_FreeBackup(&backup);

	/* We're done */
	return 0;
}
コード例 #2
0
ファイル: backup.c プロジェクト: Romppanen/gammu
void SaveFile(int argc, char *argv[])
{
	GSM_Error error;
	GSM_Backup		Backup;
	int			i;
	size_t data_size = 0;
	FILE			*file;
	unsigned char		Buffer[100000];
	GSM_MemoryEntry		*pbk;
	long int location;

	if (strcasecmp(argv[2],"CALENDAR") == 0) {
		if (argc < 5) {
			printf("%s\n", _("Where is backup filename and location?"));
			Terminate(2);
		}
		location = GetInt(argv[5]) - 1;
		error = GSM_ReadBackupFile(argv[4], &Backup,GSM_GuessBackupFormat(argv[4], FALSE));
		if (error != ERR_NOTIMPLEMENTED) {
			Print_Error(error);
		}
		i = 0;
		while (Backup.Calendar[i] != NULL) {
			if (i == location) break;
			i++;
		}
		if (i != location || Backup.Calendar[i] == NULL) {
			printf("%s\n", _("Calendar note not found in file"));
			GSM_FreeBackup(&Backup);
			Terminate(2);
		}
		error = GSM_EncodeVCALENDAR(Buffer, sizeof(Buffer), &data_size, Backup.Calendar[i],TRUE,Nokia_VCalendar);
		GSM_FreeBackup(&Backup);
		Print_Error(error);
	} else if (strcasecmp(argv[2],"BOOKMARK") == 0) {
		if (argc < 5) {
			printf("%s\n", _("Where is backup filename and location?"));
			Terminate(2);
		}
		location = GetInt(argv[5]) - 1;
		error = GSM_ReadBackupFile(argv[4],&Backup,GSM_GuessBackupFormat(argv[4], FALSE));
		if (error != ERR_NOTIMPLEMENTED) {
			Print_Error(error);
		}
		i = 0;
		while (Backup.WAPBookmark[i]!=NULL) {
			if (i == location) break;
			i++;
		}
		if (i != location || Backup.WAPBookmark[i] == NULL) {
			printf("%s\n", _("WAP bookmark not found in file"));
			GSM_FreeBackup(&Backup);
			Terminate(2);
		}
		error = GSM_EncodeURLFile(Buffer, &data_size, Backup.WAPBookmark[i]);
		GSM_FreeBackup(&Backup);
		Print_Error(error);
	} else if (strcasecmp(argv[2],"NOTE") == 0) {
		if (argc<5) {
			printf("%s\n", _("Where is backup filename and location?"));
			Terminate(2);
		}
		location = GetInt(argv[5]) - 1;
		error=GSM_ReadBackupFile(argv[4],&Backup,GSM_GuessBackupFormat(argv[4], FALSE));
		if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
		i = 0;
		while (Backup.Note[i]!=NULL) {
			if (i == location) break;
			i++;
		}
		if (i != location || Backup.Note[i] == NULL) {
			printf("%s\n", _("Note not found in file"));
			GSM_FreeBackup(&Backup);
			Terminate(2);
		}
		error = GSM_EncodeVNTFile(Buffer, sizeof(Buffer), &data_size, Backup.Note[i]);
		GSM_FreeBackup(&Backup);
		Print_Error(error);
	} else if (strcasecmp(argv[2],"TODO") == 0) {
		if (argc<5) {
			printf("%s\n", _("Where is backup filename and location?"));
			Terminate(2);
		}
		location = GetInt(argv[5]) - 1;
		error=GSM_ReadBackupFile(argv[4],&Backup,GSM_GuessBackupFormat(argv[4], FALSE));
		if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
		i = 0;
		while (Backup.ToDo[i]!=NULL) {
			if (i == location) break;
			i++;
		}
		if (i != location || Backup.ToDo[i] == NULL) {
			printf("%s\n", _("Todo note not found in file"));
			GSM_FreeBackup(&Backup);
			Terminate(2);
		}
		error = GSM_EncodeVTODO(Buffer, sizeof(Buffer), &data_size, Backup.ToDo[i], TRUE, Nokia_VToDo);
		GSM_FreeBackup(&Backup);
		Print_Error(error);
	} else if (strcasecmp(argv[2],"VCARD10") == 0 || strcasecmp(argv[2],"VCARD21") == 0) {
		if (argc<6) {
			printf("%s\n", _("Where is backup filename and location and memory type?"));
			Terminate(2);
		}
		location = GetInt(argv[6]) - 1;
		error=GSM_ReadBackupFile(argv[4],&Backup,GSM_GuessBackupFormat(argv[4], FALSE));
		if (error!=ERR_NOTIMPLEMENTED) Print_Error(error);
		i = 0;
		if (strcasecmp(argv[5],"SM") == 0) {
			while (Backup.SIMPhonebook[i]!=NULL) {
				if (i == location) break;
				i++;
			}
			if (i != location || Backup.SIMPhonebook[i] == NULL) {
				printf("%s\n", _("Phonebook entry not found in file"));
				GSM_FreeBackup(&Backup);
				Terminate(2);
			}
			pbk = Backup.SIMPhonebook[i];
		} else if (strcasecmp(argv[5],"ME") == 0) {
			while (Backup.PhonePhonebook[i]!=NULL) {
				if (i == location) break;
				i++;
			}
			if (i != location || Backup.PhonePhonebook[i] == NULL) {
				printf("%s\n", _("Phonebook entry not found in file"));
				GSM_FreeBackup(&Backup);
				Terminate(2);
			}
			pbk = Backup.PhonePhonebook[i];
		} else {
			printf(_("Unknown memory type: \"%s\"\n"),argv[5]);
			GSM_FreeBackup(&Backup);
			Terminate(2);
		}
		if (strcasecmp(argv[2],"VCARD10") == 0) {
			error = GSM_EncodeVCARD(GSM_GetDebug(gsm), Buffer, sizeof(Buffer), &data_size, pbk, TRUE, Nokia_VCard10);
			GSM_FreeBackup(&Backup);
			Print_Error(error);
		} else {
			error = GSM_EncodeVCARD(GSM_GetDebug(gsm), Buffer, sizeof(Buffer), &data_size, pbk, TRUE, Nokia_VCard21);
			GSM_FreeBackup(&Backup);
			Print_Error(error);
		}
	} else {
		printf(_("Unknown backup format: \"%s\"\n"), argv[2]);
		Terminate(2);
	}

	file = fopen(argv[3],"wb");
	if (file == NULL) {
		printf_err("%s", _("Error while opening file for writing!\n"));
		Terminate(3);
	}
	if (data_size != fwrite(Buffer,1,data_size,file)) {
		printf_err("%s", _("Error while writing file!\n"));
	}
	if (fclose(file) != 0) {
		printf_err("%s", _("Error while closing file!\n"));
	}
}