aboutsummaryrefslogtreecommitdiff
path: root/src/auction/gnunet-auction-create.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/auction/gnunet-auction-create.c')
-rw-r--r--src/auction/gnunet-auction-create.c292
1 files changed, 146 insertions, 146 deletions
diff --git a/src/auction/gnunet-auction-create.c b/src/auction/gnunet-auction-create.c
index 3ee4d3554..42ab14aca 100644
--- a/src/auction/gnunet-auction-create.c
+++ b/src/auction/gnunet-auction-create.c
@@ -11,12 +11,12 @@
11 WITHOUT ANY WARRANTY; without even the implied warranty of 11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details. 13 Affero General Public License for more details.
14 14
15 You should have received a copy of the GNU Affero General Public License 15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 17
18 SPDX-License-Identifier: AGPL3.0-or-later 18 SPDX-License-Identifier: AGPL3.0-or-later
19 */ 19 */
20 20
21/** 21/**
22 * @file auction/gnunet-auction-create.c 22 * @file auction/gnunet-auction-create.c
@@ -54,94 +54,94 @@ static int interactive; /** keep running in foreground */
54 * @param cfg configuration 54 * @param cfg configuration
55 */ 55 */
56static void 56static void
57run (void *cls, 57run(void *cls,
58 char *const *args, 58 char *const *args,
59 const char *cfgfile, 59 const char *cfgfile,
60 const struct GNUNET_CONFIGURATION_Handle *cfg) 60 const struct GNUNET_CONFIGURATION_Handle *cfg)
61{ 61{
62 unsigned int i; 62 unsigned int i;
63 double cur, prev = DBL_MAX; 63 double cur, prev = DBL_MAX;
64 json_t *pmap; 64 json_t *pmap;
65 json_t *parray; 65 json_t *parray;
66 json_t *pnode; 66 json_t *pnode;
67 json_error_t jerr; 67 json_error_t jerr;
68 68
69 /* cmdline parsing */ 69 /* cmdline parsing */
70 if (GNUNET_TIME_UNIT_ZERO.rel_value_us == dstart.rel_value_us) 70 if (GNUNET_TIME_UNIT_ZERO.rel_value_us == dstart.rel_value_us)
71 { 71 {
72 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 72 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
73 "required argument --regtime missing or invalid (zero)\n"); 73 "required argument --regtime missing or invalid (zero)\n");
74 goto fail; 74 goto fail;
75 } 75 }
76 if (GNUNET_TIME_UNIT_ZERO.rel_value_us == dround.rel_value_us) 76 if (GNUNET_TIME_UNIT_ZERO.rel_value_us == dround.rel_value_us)
77 { 77 {
78 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 78 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
79 "required argument --roundtime missing or invalid (zero)\n"); 79 "required argument --roundtime missing or invalid (zero)\n");
80 goto fail; 80 goto fail;
81 } 81 }
82 if (!fndesc) 82 if (!fndesc)
83 { 83 {
84 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 84 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
85 "required argument --description missing\n"); 85 "required argument --description missing\n");
86 goto fail; 86 goto fail;
87 } 87 }
88 if (!fnprices) 88 if (!fnprices)
89 { 89 {
90 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 90 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
91 "required argument --pricemap missing\n"); 91 "required argument --pricemap missing\n");
92 goto fail; 92 goto fail;
93 } 93 }
94 94
95 /* parse and check pricemap validity */ 95 /* parse and check pricemap validity */
96 if (!(pmap = json_load_file (fnprices, JSON_DECODE_INT_AS_REAL, &jerr))) 96 if (!(pmap = json_load_file(fnprices, JSON_DECODE_INT_AS_REAL, &jerr)))
97 { 97 {
98 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 98 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
99 "parsing pricemap json at %d:%d: %s\n", 99 "parsing pricemap json at %d:%d: %s\n",
100 jerr.line, jerr.column, jerr.text); 100 jerr.line, jerr.column, jerr.text);
101 goto fail; 101 goto fail;
102 } 102 }
103 if (-1 == json_unpack_ex (pmap, &jerr, JSON_VALIDATE_ONLY, 103 if (-1 == json_unpack_ex(pmap, &jerr, JSON_VALIDATE_ONLY,
104 "{s:s, s:[]}", "currency", "prices")) 104 "{s:s, s:[]}", "currency", "prices"))
105 { 105 {
106 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 106 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
107 "validating pricemap: %s\n", jerr.text); 107 "validating pricemap: %s\n", jerr.text);
108 goto fail; 108 goto fail;
109 } 109 }
110 if (!(parray = json_object_get (pmap, "prices")) || !json_is_array (parray)) 110 if (!(parray = json_object_get(pmap, "prices")) || !json_is_array(parray))
111 { 111 {
112 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 112 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
113 "could not get `prices` array node from pricemap\n"); 113 "could not get `prices` array node from pricemap\n");
114 goto fail; 114 goto fail;
115 } 115 }
116 if (0 == json_array_size (parray)) 116 if (0 == json_array_size(parray))
117 { 117 {
118 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "empty pricemap array\n"); 118 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "empty pricemap array\n");
119 goto fail; 119 goto fail;
120 } 120 }
121 json_array_foreach (parray, i, pnode) 121 json_array_foreach(parray, i, pnode)
122 { 122 {
123 if (-1 == json_unpack_ex (pnode, &jerr, 0, "F", &cur)) 123 if (-1 == json_unpack_ex(pnode, &jerr, 0, "F", &cur))
124 { 124 {
125 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 125 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
126 "validating pricearray index %d: %s\n", i, jerr.text); 126 "validating pricearray index %d: %s\n", i, jerr.text);
127 goto fail; 127 goto fail;
128 } 128 }
129 if (prev <= cur) 129 if (prev <= cur)
130 { 130 {
131 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 131 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
132 "validating pricearray index %d: " 132 "validating pricearray index %d: "
133 "prices must be strictly monotonically decreasing\n", 133 "prices must be strictly monotonically decreasing\n",
134 i); 134 i);
135 goto fail; 135 goto fail;
136 } 136 }
137 prev = cur; 137 prev = cur;
138 } 138 }
139 139
140 return; 140 return;
141 141
142fail: 142fail:
143 ret = 1; 143 ret = 1;
144 return; 144 return;
145} 145}
146 146
147 147
@@ -153,64 +153,64 @@ fail:
153 * @return 0 ok, 1 on error 153 * @return 0 ok, 1 on error
154 */ 154 */
155int 155int
156main (int argc, char *const *argv) 156main(int argc, char *const *argv)
157{ 157{
158 struct GNUNET_GETOPT_CommandLineOption options[] = { 158 struct GNUNET_GETOPT_CommandLineOption options[] = {
159 159 GNUNET_GETOPT_option_filename('d',
160 GNUNET_GETOPT_option_filename ('d', 160 "description",
161 "description", 161 "FILE",
162 "FILE", 162 gettext_noop("description of the item to be sold"),
163 gettext_noop ("description of the item to be sold"), 163 &fndesc),
164 &fndesc), 164
165 165 GNUNET_GETOPT_option_filename('p',
166 GNUNET_GETOPT_option_filename ('p', 166 "pricemap",
167 "pricemap", 167 "FILE",
168 "FILE", 168 gettext_noop("mapping of possible prices"),
169 gettext_noop ("mapping of possible prices"), 169 &fnprices),
170 &fnprices), 170
171 171 GNUNET_GETOPT_option_relative_time('r',
172 GNUNET_GETOPT_option_relative_time ('r', 172 "roundtime",
173 "roundtime", 173 "DURATION",
174 "DURATION", 174 gettext_noop("max duration per round"),
175 gettext_noop ("max duration per round"), 175 &dround),
176 &dround), 176
177 177 GNUNET_GETOPT_option_relative_time('s',
178 GNUNET_GETOPT_option_relative_time ('s', 178 "regtime",
179 "regtime", 179 "DURATION",
180 "DURATION", 180 gettext_noop("duration until auction starts"),
181 gettext_noop ("duration until auction starts"), 181 &dstart),
182 &dstart), 182 GNUNET_GETOPT_option_uint('m',
183 GNUNET_GETOPT_option_uint ('m', 183 "m",
184 "m", 184 "NUMBER",
185 "NUMBER", 185 gettext_noop("number of items to sell\n"
186 gettext_noop ("number of items to sell\n" 186 "0 for first price auction\n"
187 "0 for first price auction\n" 187 ">0 for vickrey/M+1st price auction"),
188 ">0 for vickrey/M+1st price auction"), 188 &m),
189 &m), 189
190 190 GNUNET_GETOPT_option_flag('u',
191 GNUNET_GETOPT_option_flag ('u', 191 "public",
192 "public", 192 gettext_noop("public auction outcome"),
193 gettext_noop ("public auction outcome"), 193 &outcome),
194 &outcome), 194
195 195 GNUNET_GETOPT_option_flag('i',
196 GNUNET_GETOPT_option_flag ('i', 196 "interactive",
197 "interactive", 197 gettext_noop("keep running in foreground until auction completes"),
198 gettext_noop ("keep running in foreground until auction completes"), 198 &interactive),
199 &interactive), 199
200 200 GNUNET_GETOPT_OPTION_END
201 GNUNET_GETOPT_OPTION_END 201 };
202 }; 202
203 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) 203 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args(argc, argv, &argc, &argv))
204 return 2; 204 return 2;
205 205
206 ret = (GNUNET_OK == 206 ret = (GNUNET_OK ==
207 GNUNET_PROGRAM_run (argc, argv, 207 GNUNET_PROGRAM_run(argc, argv,
208 "gnunet-auction-create", 208 "gnunet-auction-create",
209 gettext_noop ("create a new auction and " 209 gettext_noop("create a new auction and "
210 "start listening for bidders"), 210 "start listening for bidders"),
211 options, 211 options,
212 &run, 212 &run,
213 NULL)) ? ret : 1; 213 NULL)) ? ret : 1;
214 GNUNET_free ((void*) argv); 214 GNUNET_free((void*)argv);
215 return ret; 215 return ret;
216} 216}